【问题标题】:Destroy all models in Backbone collection (persisted in local storage)销毁 Backbone 集合中的所有模型(保存在本地存储中)
【发布时间】:2014-11-30 05:12:46
【问题描述】:

如何删除我的集合中的所有模型(保留在本地存储中)?

模型是从本地存储中获取的 - 我希望模型在客户端和本地存储中都被销毁。

// Model + Collection
App.Models.Task = Backbone.Model.extend({
    defaults: {
        text: 'N/A'
    }
});

App.Collections.Tasks = Backbone.Collection.extend({
    model: App.Models.Task,
    localStorage: new Backbone.LocalStorage("task")
});


// Create collection and fetch tasks 
var tasks = new App.Collections.Tasks();
tasks.fetch(); // collection is now populated with 4 tasks


// Delete all models (both at client and local storage)
tasks.each(function(model) {
   model.destroy();
})

通过运行此程序,我只销毁了一些模型 - 发生此错误并防止其余模型被销毁:

Uncaught TypeError: Cannot read property 'destroy' of undefined

非常感谢您对此的任何帮助!

【问题讨论】:

  • 如果一个完整的代码问题是异步获取类型。要遍历集合,您必须等到 fetch 完成。
  • 单击按钮时会启动迭代 - 这是在获取数据时完成的,所以我认为这不是问题
  • 你能把console.log(model)输出附加到一个循环中吗?
  • console.log输出模型没有任何问题-请看下面的解决方案

标签: backbone.js backbone-local-storage


【解决方案1】:

我找到了解决办法:

_.invoke(tasks.toArray(), 'destroy');

显然,使用 .each 来销毁模型是一种不好的做法,因为不断删除模型会破坏内部迭代。

【讨论】:

  • 您能否详细说明内部迭代如何因模型的删除而变得混乱?
  • 迭代没有考虑突然丢失的元素。因此,上述方法有效,或者使用反向运行的 for 循环
猜你喜欢
  • 2014-03-21
  • 1970-01-01
  • 2011-11-24
  • 2015-10-19
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
相关资源
最近更新 更多