2012-04-19 43 views
1

如果在初始化dialogview時使用模型屬性的對象數組初始化集合。然後,允許用戶編輯列表的對話框視圖通過調用模型集來更新這些模型值。當單擊對話框的OK按鈕時,backbone是否提供了一種方法來獲取自從創建/初始化集合以來僅更改了那些模型的列表?如何獲得集合中建模後發生更改的模型列表

回答

3

有看起來誘人的各種模型方法:

但是,不要被愚弄,那些只適用而"change"事件正在tr iggered:

Note that this method, and the following change-related ones, are only useful during the course of a "change" event.

所以他們沒用在事件發生後已被觸發和處理。

我認爲你必須跟蹤哪些模型已經改變了你自己。你可以自

Any event that is triggered on a model in a collection will also be triggered on the collection directly, for convenience.

集合本身做這個沒有太多精力和收集可以綁定到其自己的事件。例如,你可以有這樣的事情在您的收藏:

Backbone.Collection.extend({ 
    initialize: function() { 
     this.delta = { }; 
     this.on('change',​​​​​ this._a_model_has_changed); 
    }, 
    changed_models: function() { 
     return _.chain(this.delta).values(); 
    }, 
    _a_model_has_changed: function(m) { 
     this.delta[m.id] = m; 
    } 
}); 

然後,你可以得到那些通過調用collection.changed_models()改變的車型。您還希望監聽其他事件,以便在模型被刪除或與服務器同步時更新此.delta;以上僅供說明。如果你不想一個下劃線對象返回你也可以使用這樣的:

changed_models: function() { 
    return _(this.delta).values(); 
} 

但能夠collection.changed_models().each(function() { ... })方便。

演示:http://jsfiddle.net/ambiguous/8PQh9/

你也可以讓模型通過對模型的一組類似的追蹤自己的骯髒。然後,你可以做這樣的事情:

collection.filter(function(m) { return m.is_dirty() }); 

其中,當然,is_dirty假若該模型已經改變返回true。

相關問題