Javascript 主干收集。每种方法都会影响每秒钟的模型
从外部单击时,我在收集时触发“removeAll”。看起来是这样的: 在集合构造函数内绑定:Javascript 主干收集。每种方法都会影响每秒钟的模型,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,从外部单击时,我在收集时触发“removeAll”。看起来是这样的: 在集合构造函数内绑定: $('.empty').click => this.removeAll() 清空购物车: removeAll: -> this.each( (item) -> item.setQuantity(0) ) 但在中只会影响其他所有模型 将数量更改为0将触发从集合中删除。这会触发购物车视图重新渲染,并删除未使用(数量==0)的模型视图 当我只是从回调内部登录时也会发生这种情况-我只收
$('.empty').click => this.removeAll()
清空购物车:
removeAll: ->
this.each( (item) ->
item.setQuantity(0)
)
但在中只会影响其他所有模型
将数量更改为0将触发从集合中删除。这会触发购物车视图重新渲染,并删除未使用(数量==0)的模型视图
当我只是从回调内部登录时也会发生这种情况-我只收到一半的消息。。。
编辑:我以独占方式使用console.log时会收到所有消息。那么,从集合中删除模型是否会干扰从集合中删除模型
怎么了?
RtL您可能在迭代集合的同时从集合中删除了内容。例如,此简化示例:
class M extends Backbone.Model
class C extends Backbone.Collection
model: M
c = new C([
{ id: 1, amount: 1 },
{ id: 2, amount: 1 },
{ id: 3, amount: 6 }
])
c.on('change:amount', (m) ->
c.remove(m) if(m.get('amount') == 0)
)
c.each (item) -> item.set(amount: 0)
将使用一个模型离开c
,即使c.each
都应该杀死它们
演示:
发生什么事了?嗯,c.each
将在迭代时跟踪它是哪个元素,但是c.remove
将更改基础数组和c.each
将不知道它必须调整其“当前元素”索引,以便丢失内容。这就是类“在遍历集合时更改集合”的问题,需要进行一些窗口修饰
只需使用清空集合,即可避免整个反馈问题:
$('.empty').click => this.reset()
演示:
一旦解决了这个问题,请停止绑定到集合中的用户界面元素。在视图中确实应该有.empty
,然后该视图将有:
events:
'click .empty': 'emptyCart'
emptyCart: ->
@collection.reset()
演示: