从Backbone.js模型中完全删除属性

时间:2012-10-27 21:59:56

标签: javascript backbone.js backbone-model

我试图从骨干模型中完全删除属性。该模型被发送到一个不太灵活的API,如果我发送我应该发送的属性,它将会中断,所以我需要删除一个属性,使其不再存在。

我从this question尝试model.unset,但是当我打印出对象时,我仍然会列出我要删除的属性,只是值为null。

我需要将该属性完全消失。

我的基本结构是:

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

3 个答案:

答案 0 :(得分:19)

问题是您错误地使用了unset的参数。 “沉默”应该是options hash的一部分,而不是单独的参数。这有效:

model.unset("AttrName", { silent: true });

可以从annotated source

中看到出现奇怪行为的原因
unset: function(attr, options) {
  (options || (options = {})).unset = true;
  return this.set(attr, null, options);
},

unset方法假定其options参数是一个对象,并尝试创建或修改它,然后将其传递给set方法。如果你传递一个字符串,那么代码的无意影响是将属性设置为null,而不是取消设置。

答案 1 :(得分:1)

覆盖模型的toJSON方法,仅包含您要发送的属性。

已更新 :(已添加代码示例)

扩展模型时,添加toJSON函数并返回具有所需属性的对象:

{
    toJSON : function() {
        return {
            name: this.get('name'),
            age: this.get('age'),
            phoneNumber: this.get('phoneNumber')
        };
    }
}

答案 2 :(得分:0)

您可以尝试仅构建一个只包含所需属性的对象(并发送该对象):

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