2012-06-06 78 views
1

我正在使用多個「節」來開發Backbone.js應用程序。每個「部分」可能有多條路線,但共享一個集合。這裏有一個簡單的例子(使用「a」和「b」部分):http://jsfiddle.net/scttnlsn/LW4Ny/Backbone.js - 跨多條路線共享集合

在這個例子中,所有的集合都在路由器初始化時被獲取,以便它們可以在多個路由上共享,在每個路由處理程序中獲取。起初看起來很好,但當共享集合的數量開始增長時,我仍然謹慎地繼續這種方式。另外,爲用戶可能永遠不會訪問的「部分」獲取集合似乎很愚蠢 - 我更願意按需加載數據。

明顯的選擇是在每個路由處理程序中獲取數據,而不是在初始化路由器時。這意味着只有實際需要的數據被提取,但是,當在同一「部分」中的路由之間移動時,它仍然會執行不必​​要的提取。收集數據將不再有任何「共享」。

處理這種情況的好方法是什麼?我覺得我需要實現某種類似緩存的結構。是否有現有解決方案?

謝謝!

斯科特

回答

1

假設我理解這個問題......你可以跳過讀取上初始化(如你所描述的替代),而且直到需要完全跳過集合的實例。然後聲明一個工廠(ISH)方法:

getOrFetchCollection: function(collectionId) { 
    var collection = this[collectionId]; 
    if(!collection) { 
    collection = this[collectionId] = new Backbone.Collection(); 
    collection.url = urlFor(collectionId); 
    collection.fetch(); 
    } 
    return collection; 
} 

然後從每個路由處理程序內調用它:

a1: function() { 
    var view = new View({ title: 'a1', collection: this.getOrFetchCollection('a') }); 
    show(view); 
} 
+0

尼斯。這似乎是構建一種緩存的好方法。收集類型會有所不同,因此將其構建爲混合到每個期望收集中的東西可能更有意義。 – scttnlsn