Ind*_*ial 9 ajax caching backbone.js
什么是确保我的集合保持缓存从而只获取一次的最佳方法?
我应该实现某种缓存层吗?我应该将Collection变量分享到需要的地方吗?我可以信任jQuerys 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
}
Run Code Online (Sandbox Code Playgroud)
Pro*_*Tom 16
我会在你的情况下实现一种集合管理器:
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];
}
}
})();
Run Code Online (Sandbox Code Playgroud)
这里管理器负责实例化集合并获取它们.你打电话的时候:
var exampleCollection = manager.getCollection('example');
Run Code Online (Sandbox Code Playgroud)
你得到一个示例集合的实例,其数据已经被提取.每当您再次需要此集合时,您可以再次调用该方法.然后,您将获得完全相同的实例,无需再次获取它.
这只是一个非常简单的管理器示例,您可以实现和增强许多其他功能.
我强烈建议不要在较低级别处理此问题(例如$ .ajax的传输层).如果这样做,您将阻止多次获取集合,但最终会在应用程序周围放置具有相同ID的不同模型实例.每个集合实例都会创建自己的模型.
在我目前正在开发的CouchApp中,我还发现有必要防止不同集合中的重复模型实例(不同的db视图可以返回相同的模型数据).这已经通过在管理器中具有单独的集合来解决,该集合跟踪已经加载到应用程序中的所有模型.
最后但并非最不重要的是,您可能会考虑在集合或管理器中实现刷新方法,该方法将处理从服务器更新集合.如果使用fetch方法执行此操作,则会重置整个集合,以便销毁所有模型,然后重新创建.如果您在应用程序中的其他位置引用此集合中的模型(通常情况下这样做),那么这很糟糕.那些实例已经过时并在您的应用中重复.刷新方法检查具有传入ID的较低实例已存在于curent集合中.如果是这样,他们会更新,否则他们会被添加.
| 归档时间: |
|
| 查看次数: |
5863 次 |
| 最近记录: |