11

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

model.unset这个问题尝试过,但是当我打印出对象时,我试图删除的属性仍然列出,只是值为 null。

我需要该属性完全消失。

我的基本结构是:

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

3 回答 3

19

问题是您unset错误地使用了参数。“静音”应该是选项哈希的一部分,而不是单独的参数。这有效:

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

从带注释的来源可以看出奇怪行为的原因:

unset: function(attr, options) {
  (options || (options = {})).unset = true;
  return this.set(attr, null, options);
},

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

于 2012-10-27T22:06:41.840 回答
1

覆盖模型的 toJSON 方法,只包含您希望发送的属性。

更新:(添加代码示例)

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

{
    toJSON : function() {
        return {
            name: this.get('name'),
            age: this.get('age'),
            phoneNumber: this.get('phoneNumber')
        };
    }
}
于 2012-10-27T22:03:09.227 回答
0

您可以尝试仅使用您想要的属性构建一个对象(并发送它):

serializeModel: function() {
  return {
    email: this.$("#email").val(),
    password: this.$("#password").val()
  }
}
于 2012-10-27T22:09:45.743 回答