Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干收集。每种方法都会影响每秒钟的模型_Javascript_Backbone.js_Coffeescript - Fatal编程技术网

Javascript 主干收集。每种方法都会影响每秒钟的模型

Javascript 主干收集。每种方法都会影响每秒钟的模型,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,从外部单击时,我在收集时触发“removeAll”。看起来是这样的: 在集合构造函数内绑定: $('.empty').click => this.removeAll() 清空购物车: removeAll: -> this.each( (item) -> item.setQuantity(0) ) 但在中只会影响其他所有模型 将数量更改为0将触发从集合中删除。这会触发购物车视图重新渲染,并删除未使用(数量==0)的模型视图 当我只是从回调内部登录时也会发生这种情况-我只收

从外部单击时,我在收集时触发“removeAll”。看起来是这样的:

在集合构造函数内绑定:

$('.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()
演示: