如何清除主干本地存储
Posted
技术标签:
【中文标题】如何清除主干本地存储【英文标题】:How to clear the backbone localstorage 【发布时间】:2012-04-12 06:51:47 【问题描述】:javascript 看起来很简单,就是 localStorage.clear()。
是否有与主干本地存储类似的东西,如果没有,有人可以为我指出正确的方向。
我正在考虑做这样的事情:
localStorage.each(localStorage.delete(this))
除了 this 不会指向那个元素吗?
【问题讨论】:
Backbone.js 不使用开箱即用的 localStorage。你用的是this还是别的什么? 只有一个localStorage
,主干将利用它。你的意思是如何清除骨干集合?
是的,这就是我正在使用的 nrabinowitz,我想这就是我的意思 abraham。
所以我尝试在附加到本地存储的集合上使用 Collection.reset() 方法,但元素没有被删除。
那么您是要删除存储在 localStorage 中的所有内容,还是仅删除客户端上的集合和 localStorage 中的集合?
【参考方案1】:
// dc was so close!
let model;
while ( model = collection.at(0) )
model.destroy(); // removes model from server and collection
【讨论】:
虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。在解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。【参考方案2】:如果您不想以编程方式执行此操作,您可以随时打开开发人员模式 (F12),导航到“资源”选项卡,从左侧窗格中选择“本地存储”并删除记录。
更新:在较新版本的 Chrome 中,“资源”选项卡已替换为“应用程序”选项卡。
【讨论】:
【参考方案3】:我知道这种感觉就像是在挖坟墓,但我一直在寻找解决这个问题的方法,但上述 sn-ps 似乎都不适合我。无论我如何尝试,我总是最终将集合的大小减少了一半。
所以经过大量的摆弄,我想出了这个:
var length = collection.length;
for (var i = 0; i < length; i++)
collection.at(0).destroy();
Backbone 正在“即时”删除项目,因此如果您有 40 个项目,您将无法删除 21. 项目,因为只剩下 20 个项目。奇怪的是,这似乎也影响了 collection.each() 函数,这对我来说真的像是一个错误..
【讨论】:
我解释了为什么会发生这种情况here,以及解决方案。 如果您不使用集合而是使用单个模型,如何清除 localStorage,我只想清除创建的数据的本地存储...它正在创建一个名为 music 的键:value some数字字母组合,然后是另一个音乐键,其值来自之前的值,其新值是我拥有的正确信息数组...请参阅此问题以获取代码 ***.com/questions/19472777/…【参考方案4】:您可以从集合中执行此操作的方式很少,但无论您选择哪种方式,您都必须在每个模型上调用destroy,这将在客户端和服务器端运行同步并销毁它(localStorage 正在执行作为)。
collection.each(function(model)
model.destroy();
)
更新
每 cmets,看起来这不再有效。由于这仍然被标记为答案,包括应该在下面工作的答案,每个skcin7
。
while ((model=collection.shift()))
model.destroy();
【讨论】:
谢谢 dc-destroy 函数是我要找的函数。 如果我只想删除第一个添加的数据怎么办? @Dreyfus15 然后在该特定元素上调用 .destroy() 。例如:collections.get(id).destroy(); 我发现这不起作用...它只会删除一些记录,而不是全部。我猜想在迭代它时修改集合的东西。我最终得到了这个: var length = collection.length; for (var i = length - 1; i >= 0; i--) collection.at(i).destroy(); 此解决方案将不起作用,因为collection
数组中的模型位置在删除时会被删除。更好的解决方案是:while ((model=collection.shift()) ) model.destroy();
。感谢用户 fbynite
我现在使用的这个解决方案。【参考方案5】:
在任何情况下,仅遍历集合并在每个元素上调用destroy 都不会保存。 原因是对同时修改的集合进行迭代会产生意想不到的结果。
最好先克隆集合并迭代这个克隆。结帐this.each not iterating through collection correctly了解更多详情。
例子:
_.chain(Todos.models).clone().each(function(model)
console.log('deleting model ' + model.id);
model.destroy();
);
【讨论】:
你也可以用_.chain(Todos.models)
代替Todos.chain().clone()
。以上是关于如何清除主干本地存储的主要内容,如果未能解决你的问题,请参考以下文章