我的路由器声明中有一个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只是使用结果呈现视图。 这很好用。我想知道的是这是否是一种缓存数据的好方法?
答案 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;
}
});