这是在Backbone.js中缓存请求数据的最佳做法吗?

时间:2014-01-27 11:31:48

标签: javascript caching backbone.js model-view-controller

我的路由器声明中有一个requestCache:{}对象。我有一个映射到具有相同名称的路线的评论方法(#reviews)。我想缓存此方法中生成的结果。

router.js

var AppRouter = Backbone.Router.extend({
        currentView: null,
requestCache: {},
reviews: function() {
        var self = this;
        var reviewCollection = new ReviewCollection();
        reviewCollection.url = '/profile/' + this.userid + '/reviews';
        if('reviews' in self.requestCache) {
            reviewCollection = self.requestCache['reviews'];
            self.changeView(new ReviewsView({collection:reviewCollection}), 'reviews');
        } else {
            reviewCollection.fetch().done(function() {
                self.requestCache['reviews'] = reviewCollection;
                self.changeView(new ReviewsView({collection:reviewCollection}), 'reviews');
            });
        }
    },

changeView只是使用结果呈现视图。 这很好用。我想知道的是这是否是一种缓存数据的好方法?

2 个答案:

答案 0 :(得分:1)

看看backbone-fetch-cache。它做你想要的。

答案 1 :(得分:0)

正如SoundCloud团队所建议的那样,他们已经开始使用商店对象来通过代码共享模型和集合。

我一直在使用Backbone SingletonModel(https://github.com/reconbot/backbone-singleton

它工作得很好,你可以为你的集合做同样的事情,在静态部分定义一个getInstance方法和一个_instance。

var MyCollection = Backbone.Collection.extend({}, {

   _instance: null,
   count: 0,
   getInstance: function () {

      if (!this._instance)
          this._instance = new MyCollection();

      this.count++;

      return this._instance;

   }

});