2013-08-23 39 views
5

我有一個要求,當用戶在不同Backbone集合模型(通過單擊一個表格行)之間切換時,有關未保存更改的用戶「嘮叨」。我搜索了「檢查骨幹模型髒數據」(例如),沒有發現任何明確的。檢查集合中是否存在任何髒骨幹模型數據

我完成此使用underscore's "some"isEqual functionality,其方式如下文中,「一些()」是否有任何未保存的變化(相對於什麼那些精確的變化可能是)足以確定,特別是因爲model屬性實際上是一個對象數組。

var anyDirty = _.some(myCollection.models, function(model) { 
    return !_.isEqual(model.get('nodes'), model.previousAttributes()['nodes]); 
}); 

我是新來的骨幹,我想知道,如果這是一個公認的排序爲即席檢查髒模型數據的方法。或者,Backbone是否爲此提供了某種內置功能,我最初嘗試使用Google進行搜索時沒有發現?

+1

關於http://stackoverflow.com/questions/9215036/backbone-js-is-there-a-change-since-last-server-save? – nikoshr

+0

謝謝你指出。現在我意識到我沒有專門寫出我的問題。我想我想知道某個特定集合中的* any *模型是否已更改。在這種情況下,我使用_.some似乎仍然適用,但在迭代器內部,我可以使用'model.hasChanged()'而不是_.isEqual() –

+1

您可以改爲聽取何時觸發change事件。堅持它作爲你收藏的一個州。一旦收集已經同步回服務器,清除它。然後只檢查該狀態屬性。我認爲在創建新模型時也會觸發'change',因此您可能還需要檢查'isNew()'。 – j03w

回答

2

我有另一個屬性,我需要除「節點」進行監測,所以我切換到使用changedAttributes():http://backbonejs.org/#Model-changedAttributes

var anyDirty = _.some(myCollection.models, function(model) { 
    return model.changedAttributes(); 
}); 

什麼可以使這是一個完美的解決方案是,它似乎就像它會返回changedAttributes的對象,即使該屬性變回原來的值。因此,從長遠來看,我所需要的幾乎是對原始數據進行快照並與之進行比較。儘管如此,使用model.changedAttributes()是我第一次發佈的更簡潔的替代方案。

+3

您會發現changedattributes包含那些自上次'設置'不是最後'同步' –