我试图从骨干模型中完全删除属性。该模型被发送到一个不太灵活的API,如果我发送我应该发送的属性,它将会中断,所以我需要删除一个属性,使其不再存在。
我从this question尝试model.unset
,但是当我打印出对象时,我仍然会列出我要删除的属性,只是值为null。
我需要将该属性完全消失。
我的基本结构是:
model.unset("AttrName", "silent");
答案 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()
}
}