2012-10-27 94 views
11

我想完全删除骨干模型中的属性。该模型正在发送到一个不太灵活的API,如果我发送的属性超出了我应该发送的属性,它将会中断,所以我需要删除一个属性,以便它不再存在。从Backbone.js模型完全删除属性

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

我需要的属性完全消失。

我的基本结构是:

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

回答

18

的问题是,你使用错误地为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,而不是取消设置。

+0

如果我将选项更改为像这样的散列,它会触发更改事件,这正是我试图用无声选项避免的情况。 – FrizbeeFanatic14

+0

@ FrizbeeFanatic14其他的东西是错误的 - 如果你使用这种语法,它不应该引发一个变化事件(我刚刚测试过)。 – McGarnagle

+0

你说得对,这是别的事情。谢谢。 – FrizbeeFanatic14

1

覆盖模型的方法的toJSON,只包括要发送的属性。

更新:(添加的代码样品)

当延长模型,添加一个的toJSON功能,并返回具有期望属性的对象:

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

我很新的骨干 - 我究竟会如何着手呢? – FrizbeeFanatic14

0

你可以尝试只是建立一个对象,只有你想要的属性(和发那):

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