什么是确保我的收藏保持缓存的最佳方式,从而只获取一次?
我应该实现某种缓存层吗?我应该将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 }
我会在你的情况下实施一种收集经理:
原文链接:https://www.f2er.com/ajax/159870.htmlvar 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中,我还发现有必要防止不同集合中的重复模型实例(不同的数据库视图可以返回相同的模型数据).这通过在管理器中有一个单独的集合来解决,它跟踪已经加载到应用程序中的所有模型.
最后但并非最不重要的是,您可能会考虑在您的集合中执行刷新方法,或者管理员将处理从服务器更新集合.如果您使用提取方法执行此操作,则会将所有集合重新设置,因此所有模型都将被销毁,然后重新创建.如果您将该集合中的模型引用到应用程序中的其他位置(如通常所做的那样),这是不好的.那些实例在您的应用程序中过时并重复.刷新方法检查wether实例与传入的id已经存在于curent集合.如果是,则更新,否则添加.