如何清除主干本地存储

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()

以上是关于如何清除主干本地存储的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从网页中清除浏览器本地存储[重复]

每当我发布新代码时如何从客户端清除本地存储

在浏览器关闭时为 React 明确清除本地存储

如何在关闭特定选项卡而不是在 Angular 2 中关闭浏览器时清除本地存储?

在 JavaScript 中清除本地存储

2分钟后清除本地存储