清除后,localStorage 会记住以前的值
Posted
技术标签:
【中文标题】清除后,localStorage 会记住以前的值【英文标题】:After a clear, localStorage remembers previous values 【发布时间】:2012-12-08 03:15:30 【问题描述】:所以,这有点奇怪。我正在使用 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);
);
型号:
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 !== -1)
diagnosisStore = localStorage.getItem('diagnosis' + '-' + diagnosisKey[index]);
if(diagnosisStore)
this.local = true;
options.success(JSON.parse(diagnosisStore));
else
this.local = false;
var fetchUrl = this.urlRoot + this.url + this._query;
$.getJSON(fetchUrl, function(data, textStatus)
if(textStatus !== 'success')
options.error();
options.success(data);
);
);
return app.DiagnosisModel;
完成工作的控制器函数:
var self = this;
// Create a new collection if we don't already have one
// The save function puts it in local storage
if(!this.diagnosisCollection)
this.diagnosisCollection = new DiagnosisCollection();
this.diagnosisCollection.on('add', function(diagModel)
this.save(diagModel);
);
var diagModel = new DiagnosisModel(
query: diagId
);
diagModel.fetch(
success: function()
var diagView = new DiagnosisView(
model: diagModel
);
if(!diagModel.local)
self.diagnosisCollection.add(diagModel);
self._switchPage(diagView);
,
error: function()
console.error("Diag Model Fetch Failed");
Backbone.history.navigate('503', trigger: true );
);
顺便说一句,localStorage.clear()
呼叫在应用程序启动中。它执行 API 调用以查看服务器上的版本是否已更改。如果版本发生了变化,那么我们就对 localStorage 进行核对。
【问题讨论】:
所有浏览器都一样吗? jsfiddle.net/Antonimo/EVUHy 您正在使用本机localStorage.clear()
清除它,但使用 Backbone.LocalStorage.sync
写入 localStorage,我的假设是 Backbone 在其内存中保留了数据的副本,它不认识您'已经使用本机方法清除了 localStorage,因此当调用 .sync
时,它会将所有内容写回 localStorage。 localStorage.clear()
在“应用程序启动”中被调用,是在 Backbone 启动之前吗?如果 Backbone 在您调用它之前加载它,它可能已经将数据从 localStorage 读取到它的内存中。
打开chrome开发工具并清除本地存储。资源 -> 本地存储
你可能想看看这个:***.com/questions/9911588/…
【参考方案1】:
代替localStorage.clear()
,使用:
localStorage.removeItem('userInfo');
我在我的主干应用程序中遇到了同样的问题,我用这种方式清除了这些值。
P.s :是的,您需要一一指定所有本地存储变量..:(..但这很好用。
【讨论】:
以上是关于清除后,localStorage 会记住以前的值的主要内容,如果未能解决你的问题,请参考以下文章
JS(定时器、 sessionStorage、 localStorage)