2012-10-27 130 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() 
    } 
}