我想完全删除骨干模型中的属性。该模型正在发送到一个不太灵活的API,如果我发送的属性超出了我应该发送的属性,它将会中断,所以我需要删除一个属性,以便它不再存在。从Backbone.js模型完全删除属性
我试过model.unset
,从this question,但是当我打印出对象时,我试图删除的属性仍然列出,只是值为null。
我需要的属性完全消失。
我的基本结构是:
model.unset("AttrName", "silent");
我想完全删除骨干模型中的属性。该模型正在发送到一个不太灵活的API,如果我发送的属性超出了我应该发送的属性,它将会中断,所以我需要删除一个属性,以便它不再存在。从Backbone.js模型完全删除属性
我试过model.unset
,从this question,但是当我打印出对象时,我试图删除的属性仍然列出,只是值为null。
我需要的属性完全消失。
我的基本结构是:
model.unset("AttrName", "silent");
的问题是,你使用错误地为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,而不是取消设置。
覆盖模型的方法的toJSON,只包括要发送的属性。
更新:(添加的代码样品)
当延长模型,添加一个的toJSON功能,并返回具有期望属性的对象:
{
toJSON : function() {
return {
name: this.get('name'),
age: this.get('age'),
phoneNumber: this.get('phoneNumber')
};
}
}
我很新的骨干 - 我究竟会如何着手呢? – FrizbeeFanatic14
你可以尝试只是建立一个对象,只有你想要的属性(和发那):
serializeModel: function() {
return {
email: this.$("#email").val(),
password: this.$("#password").val()
}
}
如果我将选项更改为像这样的散列,它会触发更改事件,这正是我试图用无声选项避免的情况。 – FrizbeeFanatic14
@ FrizbeeFanatic14其他的东西是错误的 - 如果你使用这种语法,它不应该引发一个变化事件(我刚刚测试过)。 – McGarnagle
你说得对,这是别的事情。谢谢。 – FrizbeeFanatic14