2013-05-06 34 views
2

比方說,我有一個取()時被稱爲骨幹模型(對於特定模式,而不是整個集合),它得到這個從服務器:製作骨架模型取指丟棄缺少的字段

{ a: "val-1", b: "val-2" } 

後來我叫取()對模型再次,這個時候服務器返回:

{ b: "val-x", c: "val-y" } 

在這一點上,我想我的模型有這個狀態,因爲這是由服務器提供的最新狀態:

{ b: "val-x", c: "val-y" } 

但是,我骨幹模型有這種狀態,而不是:

{ a: "val-1", b: "val-x", c: "val-y" } 

如何在骨幹網做我取()的模型,因此產生的狀態中正是從服務器返回,並且不包括舊的過時的領域?

回答

5

我發現,要獲得所需的行爲的一種方式是有問題加入這個解析函數模型:如果從服務器的響應缺少這是在局部模型的屬性

parse: function(resp) { 
    for (var key in this.attributes) { 
    if (resp[key] === undefined) { 
     resp[key] = undefined; 
    } 
    } 

    return resp; 
} 

,它明確地將該鍵添加到具有未定義值的響應中。這會導致fetch()正確行爲並將其從模型中移除。

+0

確實。我認爲它是骨幹的一個缺陷,而不是在模型提取上提供重置選項。 – 2014-11-21 12:44:19

0

如果您想要取消放棄您的本地狀態並且不合並服務器數據,請使用{reset:true}選項。

從文檔:http://backbonejs.org/#Collection-fetch

當從服務器模型數據的回報,它採用設置爲 (智能)合併所取得的模型,除非你通過{復位: 真},在這種情況下,該集合將被(有效)重置。

+0

該選項用於重新獲取整個集合。我在集合中獲取單個模型。 – Atlas 2013-05-06 21:34:57

+0

你可以調用model.clear();如果你不關心你擁有的狀態,那麼在取得之前。 – 2013-05-06 21:51:11

+0

不幸的是,明確不會削減它,因爲fetch()是異步的,理論上可能需要一段時間才能返回。與此同時,我不能讓模型處於不良狀態。 – Atlas 2013-05-06 22:15:26