我很惊讶地发现这不起作用:
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
事件)?
答案 0 :(得分:83)
答案 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)
对我来说这感觉有些笨拙,但这可能只是我自己的审美。