如何在BackboneModel中创建缓存/存储器

假设我有一个View可以制作model.fetch(),然后向服务器发送请求。

我想实施:
1)能够记住结果
的检查器 2)仅在服务器的最后一次请求超过十分钟时才刷新结果(向服务器发送请求)。

我该怎么做?
有没有一段代码可以做到这一点?

define([], function() {

    var MyModel = Backbone.Model.extend({

    url: function() {
        return "http://localhost/restapi/model/";
    },

    fetch() {
        if(diffTime > 10minutes) {
           //make request to the server
        }
        else {
           //return memo
        }
    }    

    });

});
0
额外 编辑
意见: 1
@ParthThakkar不完全是,如果视图比10分钟更新model.fetch()而不是刷新模型。
额外 作者 underscore666,
@ParthThakkar对服务器的最后一个请求的更老的尊重
额外 作者 underscore666,
你的意思是,每十分钟就应该提出一个新的要求?
额外 作者 Parth Thakkar,
10分钟以上?年纪大了些什么?前面的 fetch()。这有点令人困惑,你可以编辑这个问题来使它更清楚吗?
额外 作者 Parth Thakkar,

3 答案

您需要覆盖Backbone.sync方法 http://documentcloud.github.com/backbone/#Sync

此代码将保存到本地存储以实现缓存 http://documentcloud.github .COM /骨干网/文档/骨干-localstorage.html

如果数据超过10分钟,则在“读取”情况下从服务器获取一些逻辑非常简单。

0
额外
不错,我想用这种方式我应该只添加两行代码......这将是一个很好的例子。
额外 作者 underscore666,

正如codemonkey所说,localstorage会是一个不错的选择。但如果您不想为此使用库,则可以使用此类来扩展那些需要缓存功能的模型。

var CachedModel = Backbone.Model.extend({

    lastFetch: null,   //millisec.
    cache: { }
    fetch: function() {
        if(!this.lastFetch || (lastFetch - Date.now() > 10*60*1000) {
           //make request to the server
        }
        else {
           //return this.cache
        }
    }    

});
0
额外

我发现 https://github.com/Ask11/backbone.offline 非常适合我。

唯一的缺点是它使用localStorage,你也可以选择更多的支持,通过重写零件和片段来与amplify.store一起使用 http://amplifyjs.com/api/store/

0
额外