我正在尝试从骨干模型中完全删除一个属性。该模型被发送到一个不太灵活的 API,如果我在应该发送的属性上发送其他属性,它会中断,所以我需要删除一个属性,使其不再存在。
我model.unset
从这个问题尝试过,但是当我打印出对象时,我试图删除的属性仍然列出,只是值为 null。
我需要该属性完全消失。
我的基本结构是:
model.unset("AttrName", "silent");
我正在尝试从骨干模型中完全删除一个属性。该模型被发送到一个不太灵活的 API,如果我在应该发送的属性上发送其他属性,它会中断,所以我需要删除一个属性,使其不再存在。
我model.unset
从这个问题尝试过,但是当我打印出对象时,我试图删除的属性仍然列出,只是值为 null。
我需要该属性完全消失。
我的基本结构是:
model.unset("AttrName", "silent");
问题是您unset
错误地使用了参数。“静音”应该是选项哈希的一部分,而不是单独的参数。这有效:
model.unset("AttrName", { silent: true });
从带注释的来源可以看出奇怪行为的原因:
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')
};
}
}
您可以尝试仅使用您想要的属性构建一个对象(并发送它):
serializeModel: function() {
return {
email: this.$("#email").val(),
password: this.$("#password").val()
}
}