Backbone.js - 跨多个路由共享集合

时间:2012-06-06 03:08:27

标签: javascript backbone.js

我正在使用多个"部分"在Backbone.js应用程序上工作。每个"部分"可能有多条路线但共享一个集合。这是一个简单的例子(包含" a"和" b"):http://jsfiddle.net/scttnlsn/LW4Ny/

在该示例中,在初始化路由器时获取所有集合,以便可以跨多个路由共享它们,而无需在每个路由处理程序中重新获取。这开始似乎很好,但是当共享集合的数量开始增长时,我担心会继续这种方式。另外,为"部分"提取集合似乎很愚蠢。这可能永远不会被用户访问 - 我更愿意按需加载数据。

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

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

谢谢!

-Scott

1 个答案:

答案 0 :(得分: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);
}