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