Полностью удалить атрибут из модели Backbone.js

Я пытаюсь полностью удалить атрибут из базовой модели. Модель отправляется в API, который не очень гибкий, и он сломается, если я отправлю дополнительные атрибуты вместо тех, которые я должен отправить, поэтому мне нужно удалить атрибут, чтобы он больше не существовал.

Я попробовал model.unset из этот вопрос, но когда я печатаю out объект, атрибут, который я пытаюсь удалить, все еще указан, только со значением null.

Мне нужно, чтобы атрибут полностью исчез.

Моя базовая структура:

model.unset("AttrName", "silent");

person FrizbeeFanatic14    schedule 27.10.2012    source источник


Ответы (3)


Переопределите метод toJSON вашей модели и включите только те атрибуты, которые вы хотите отправить.

Обновлено: (добавлен пример кода)

При расширении модели добавьте функцию toJSON и верните объект с нужными атрибутами:

{
    toJSON : function() {
        return {
            name: this.get('name'),
            age: this.get('age'),
            phoneNumber: this.get('phoneNumber')
        };
    }
}
person Tal Bereznitskey    schedule 27.10.2012
comment
Я новичок в Backbone — как именно мне это сделать? - person FrizbeeFanatic14; 28.10.2012

Вы можете попробовать просто создать объект только с нужными вам свойствами (и отправить его):

serializeModel: function() {
  return {
    email: this.$("#email").val(),
    password: this.$("#password").val()
  }
}
person poorman    schedule 27.10.2012

person    schedule
comment
Если я изменю параметры на такой хеш, он вызовет событие изменения, чего я и пытаюсь избежать с помощью тихой опции. - person FrizbeeFanatic14; 28.10.2012
comment
@ FrizbeeFanatic14 что-то еще не так - если вы используете этот синтаксис, он не должен вызывать событие изменения (я только что проверил это). - person McGarnagle; 28.10.2012
comment
Вы правы, это событие было вызвано чем-то другим. Спасибо. - person FrizbeeFanatic14; 28.10.2012