微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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集合.如果是,则更新,否则添加.

原文地址:https://www.jb51.cc/ajax/159870.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐