所以,这有点奇怪.我正在使用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) 我刚刚开始使用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();
我意识到我可以根据长度迭代集合,但我宁愿在可能的情况下使用内置方法.
我试图批量删除骨干模型的集合,如此...
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方法的数量?