确保我的集合保持缓存并仅获取一次的最佳方法是什么?
我应该实现某种缓存层吗?我应该分享Collection
变量到需要的地方?我可以信任 jQuery 的 AJAX 设置吗? ($.ajaxSetup ({ cache: true });
)
现在看起来的基本集合:
theCollection = Backbone.Collection.extend({
model: theModel,
url: "source.json"
});
if (typeof myCollection === 'undefined') {
var myCollection = new theCollection; // Only allow it to be created once
}
我会在你的情况下实现一种集合管理器:
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 的传输层)。如果这样做,您将阻止多次获取您的集合,但最终您的应用程序中会出现具有相同 id 的不同模型实例。每个集合实例都会创建它自己的模型。
在我目前正在开发的 CouchApp 中,我还发现有必要防止不同集合中的重复模型实例(不同的数据库视图可以返回相同的模型数据)。这个问题已通过在管理器中建立一个单独的集合来解决,该集合跟踪已加载到应用程序中的所有模型。
最后但并非最不重要的一点是,您可能会考虑在集合或管理器中实现刷新方法,以处理从服务器更新集合的情况。如果您使用 fetch 方法执行此操作,您的整个集合将被重置,因此所有模型都会被销毁,然后重新创建。如果您在应用程序的其他地方引用了该集合中的模型(就像您通常所做的那样),那么这很糟糕。这些实例已过时并在您的应用程序中重复。刷新方法检查当前集合中是否已存在具有传入 id 的实例。如果是,则更新它们,否则添加它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)