如何清空Backbone.js集合

时间:2011-05-23 19:36:17

标签: backbone.js coffeescript

我很惊讶地发现这不起作用:

coll = new Backbone.Collection
for i in [1..1000]
  coll.add new Backbone.Model()

console.log coll.length # 1000
coll.remove coll.models
console.log coll.length # 500!

我理解为什么这个奇怪的结果或多或少会发生,尽管它对我来说似乎是一个错误。在任何情况下,什么是最好的替代方案,而不采用像_reset这样的内部方法(无论如何都不会起作用,因为我希望触发相应的remove事件)?

4 个答案:

答案 0 :(得分:83)

最简单的方法是在集合上调用.reset()[docs]

  

调用collection.reset()而不传递任何模型作为参数将清空整个集合。

collection.reset();

答案 1 :(得分:2)

Personnaly我使用:

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

通过调用 destroy 方法

删除集合的每个元素

答案 2 :(得分:0)

标记为已接受的响应不完整,因为 collection.reset 是一种静默方法,不会触发您为了清理集合和/或模型而可能声明的事件。

我的方法是这样的:

for (let i=0; i<collection.length; i++)
    collection.shift();

以这种方式传播事件

答案 3 :(得分:-5)

显而易见的答案是克隆models,例如:

coll.remove coll.models.slice(0)

对我来说这感觉有些笨拙,但这可能只是我自己的审美。