Полностью удалить атрибут из модели 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()
  }
}