我想完全刪除骨幹模型中的屬性。該模型正在發送到一個不太靈活的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