ajax – 在branches.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
}
我会在你的情况下实施一种收集经理:
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中,我还发现有必要防止不同集合中的重复模型实例(不同的数据库视图可以返回相同的模型数据).这通过在管理器中有一个单独的集合来解决,它跟踪已经加载到应用程序中的所有模型.

最后但并非最不重要的是,您可能会考虑在您的集合中执行刷新方法,或者管理员将处理从服务器更新集合.如果您使用提取方法执行此操作,则会将所有集合重新设置,因此所有模型都将被销毁,然后重新创建.如果您将该集合中的模型引用到应用程序中的其他位置(如通常所做的那样),这是不好的.那些实例在您的应用程序中过时并重复.刷新方法检查wether实例与传入的id已经存在于curent集合.如果是,则更新,否则添加.

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...