Полностью удалить атрибут из модели Backbone.js
Я пытаюсь полностью удалить атрибут из базовой модели. Модель отправляется в API, который не очень гибок, и он сломается, если я отправлю дополнительные атрибуты поверх тех, которые я должен отправить, поэтому мне нужно удалить атрибут, чтобы он больше не существовал.
Я старался model.unset
из этого вопроса, но когда я распечатываю объект, атрибут, который я пытаюсь удалить, все еще отображается, только со значением null.
Мне нужно, чтобы атрибут полностью исчез.
Моя основная структура:
model.unset("AttrName", "silent");
3 ответа
Проблема в том, что вы используете параметры для unset
неправильно. "Silent" должен быть частью хэша опций, а не отдельным параметром. Это работает:
model.unset("AttrName", { silent: true });
Причину странного поведения можно увидеть из аннотированного источника:
unset: function(attr, options) {
(options || (options = {})).unset = true;
return this.set(attr, null, options);
},
unset
Метод предполагает, что его options
Параметр является объектом и пытается либо создать, либо изменить его, а затем передать его set
метод. Если вместо этого вы передаете строку, то непреднамеренный эффект кода состоит в том, чтобы установить для атрибута значение null, а не для его сброса.
Переопределите метод toJSON вашей модели и включите только те атрибуты, которые вы хотите отправить.
Обновлено: (добавлен пример кода)
При расширении модели добавьте функцию toJSON и верните объект с требуемыми атрибутами:
{
toJSON : function() {
return {
name: this.get('name'),
age: this.get('age'),
phoneNumber: this.get('phoneNumber')
};
}
}
Вы можете попробовать создать объект только с теми свойствами, которые вам нужны (и отправить их):
serializeModel: function() {
return {
email: this.$("#email").val(),
password: this.$("#password").val()
}
}