1

我正在开发具有多个“部分”的 Backbone.js 应用程序。每个“部分”可能有多个路线,但共享一个集合。这是一个简单的示例(带有“a”和“b”部分):http: //jsfiddle.net/scttnlsn/LW4Ny/

在这个例子中,所有的集合都是在路由器初始化时获取的,这样它们就可以在多个路由之间共享,而无需在每个路由处理程序中重新获取。起初这似乎很好,但当共享集合的数量开始增长时,我对继续这种方式持谨慎态度。此外,为用户可能永远不会访问的“部分”获取集合似乎很愚蠢——我更愿意按需加载数据。

显而易见的替代方法是在每个路由处理程序中获取数据,而不是在路由器初始化时获取数据。这意味着只获取实际需要的数据,但是,当在同一“部分”中的路由之间移动时,它仍然最终会执行不必​​要的获取。收集数据将不再有任何“共享”。

处理这种情况的好方法是什么?我觉得我需要实现某种类似缓存的结构。有现成的解决方案吗?

谢谢!

-斯科特

4

1 回答 1

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);
}
于 2012-06-06T03:49:12.070 回答