【问题标题】: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 中的集合?

标签: backbone.js local-storage


【解决方案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数字字母组合,然后是另一个音乐键,其值来自之前的值,其新值是我拥有的正确信息数组...请参阅此问题以获取代码 stackoverflow.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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2017-11-25
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多