我正在使用多个"部分"在Backbone.js应用程序上工作。每个"部分"可能有多条路线但共享一个集合。这是一个简单的例子(包含" a"和" b"):http://jsfiddle.net/scttnlsn/LW4Ny/
在该示例中,在初始化路由器时获取所有集合,以便可以跨多个路由共享它们,而无需在每个路由处理程序中重新获取。这开始似乎很好,但是当共享集合的数量开始增长时,我担心会继续这种方式。另外,为"部分"提取集合似乎很愚蠢。这可能永远不会被用户访问 - 我更愿意按需加载数据。
显而易见的替代方法是在每个路由处理程序中获取数据,而不是在路由器初始化时。这意味着只获取实际需要的数据,但是,当在同一"部分"中的路径之间移动时,它仍然最终执行不必要的提取。将不再有任何"分享"收集数据。
处理这种情况的好方法是什么?我觉得我需要实现某种类似缓存的结构。有现成的解决方案吗?
谢谢!
-Scott
答案 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);
}