相关疑难解决方法(0)

在明确之后,localStorage会记住以前的值

所以,这有点奇怪.我正在使用Backbone和Backbone.localStorage将远程数据保存到本地存储以进行缓存.很标准的东西.

当我localStorage.clear()在整个商店上运行时,除了具有字符串数组值的键之外,所有值都将永久清除.它会在第一次检查时被清除,但是当存储再次保存时,Backbone.LocalStorage.sync('create', model);之前的值又回到那里.

当然,如果我手动删除Chrome开发者工具中的密钥,那么它就会消失并且不会重新填充.这就好像localStorage.clear()调用仍然使用字符串数组缓存键.我已经确认它最初是在应用启动时清除的.

我会在编辑时发布一些代码和截图,但实际上它非常标准,除了在重新填充密钥后这些值仍然存在的事实.这里有什么想法?

编辑:很多有趣的代码:

采集:

app.DiagnosisCollection = Backbone.Collection.extend({
    model: DiagnosisModel,
    localStorage: new Backbone.LocalStorage('diagnosis'),

    save: function(model) {
        Backbone.LocalStorage.sync('create', model);
    }
});
Run Code Online (Sandbox Code Playgroud)

模型:

app.DiagnosisModel = Backbone.Model.extend({

    urlRoot: app.ApiRoot,
    url: app.DiagnosisApi,

    initialize: function(options) {
        if(!options.query) {
            throw 'query must be passed to diagnosisModel';
        }

        this.local = false;
        this._query = options.query;
    },

    sync: function(method, model, options) {
        var diagnosisKey = localStorage.getItem('diagnosis');
        var index, diagnosisStore;

        if(diagnosisKey) {
            diagnosisKey = diagnosisKey.split(',');
        }

        index = _.indexOf(diagnosisKey, this._query);

        if(index !== …
Run Code Online (Sandbox Code Playgroud)

javascript local-storage backbone.js

5
推荐指数
1
解决办法
1571
查看次数

this.each没有正确地迭代集合

我刚刚开始使用backbone.js,我正在添加一些基本方法来扩展一个集合,允许我遍历一个集合并保存所有模型,并迭代一个集合来销毁所有模型.我意识到批量更新不是RESTful,但我只是更新到本地存储,所以不认为进行多次更新会是一个问题.

在我的基础应用程序中,该集合有9个模型.当我调用collection.saveModels()时,它会正确记录集合的长度,并正确保存所有模型.

当我调用collection.deleteModels()时,它会正确记录集合的长度,但会跳过每秒模型(即第2,第4,第6,第8).每次按下删除时,它继续只删除奇数索引元素,最后一个要删除的项目是第8个原始项目.

是否有可能我错误地使用了每个功能,尽管它在保存时工作得很好?

_.extend(Backbone.Collection.prototype, Backbone.Events, {
saveModels  :   function() {
    console.log(this.length);
    this.each(function(model){
        console.log('saving model ' + model.get('name'));
        model.save();
    });
},
deleteModels    :   function() {
    console.log(this.length);
    this.each(function(model){
        console.log('deleting model ' + model.get('name'));
        model.destroy();
    });
}
});
Run Code Online (Sandbox Code Playgroud)

他们被这样称呼:mycollection.saveModels();mycollection.deleteModels();

我意识到我可以根据长度迭代集合,但我宁愿在可能的情况下使用内置方法.

javascript arrays local-storage backbone.js

2
推荐指数
3
解决办法
5879
查看次数

Backbone model.destroy()受限

我试图批量删除骨干模型的集合,如此...

collection.each(function(model, i){
  model.destroy();
});
Run Code Online (Sandbox Code Playgroud)

我发现当每个循环包含model.destroy()时,它会在计数10后停止.如果我再次运行它,它会停止5.在3 ... 2 ..之后的时间然后是1.

如果我用console.log(i)替换model.destroy(),则循环运行集合的长度.

这是Backbone中的故意限制,以防止您在一次性删除1000条记录或浏览器限制相对同时DELETE方法的数量?

javascript backbone.js

0
推荐指数
1
解决办法
488
查看次数

标签 统计

backbone.js ×3

javascript ×3

local-storage ×2

arrays ×1