我會實現一種集經理,你的情況:
var manager = (function(){
var constructors = {
'example': ExampleCollection
};
var collections = {};
return {
getCollection: function(name) {
if(!collections[name]) {
var collection = new constructors[name]();
collection.fetch();
collections[name] = collection;
}
return collections[name];
}
}
})();
這裏的經理負責實例收集和獲取它們。當您撥打電話:
var exampleCollection = manager.getCollection('example');
您將獲得一個示例集合實例,其中已獲取數據。只要你再次需要這個集合,你可以再次調用這個方法。然後您將獲得完全相同的實例,無需再次獲取。
這只是一個非常簡單的管理器示例,還有很多其他功能可以實現和增強。
我強烈建議不要在較低級別處理此問題(例如$ .ajax的傳輸層)。如果你這樣做了,你會阻止你的集合被多次獲取,但是最終會有不同的模型實例在你的應用程序中浮動。每個集合實例都會創建它自己的模型。
在我目前正在研究的CouchApp中,我還發現有必要在不同的集合中防止重複的模型實例(不同的數據庫視圖可以返回相同的模型數據)。這已經通過在管理器中有一個單獨的集合來解決,該集合跟蹤已經加載到應用程序中的所有模型。
最後但並非最不重要的是,您可能會考慮在您的集合中執行刷新方法,或者將處理從服務器更新集合的管理器。如果使用fetch方法執行此操作,則整個集合將被重置,以便所有模型都被銷燬並重新創建。如果您在應用程序的其他位置引用了此集合中的模型(如您通常所做的那樣),那麼這很糟糕。那些實例已過時,然後在您的應用中重複。刷新方法使用傳入的id檢查其他實例是否已存在於curent集合中。如果是這樣,他們被更新,否則他們被添加。
賞金已打開!希望得到更多關於這個問題的意見! – Industrial
您是否想使用localStorage將您的集合緩存在瀏覽器上,或者只是確保集合是單例集合,並且始終需要它將調用已獲取的同一個實例? –