Backbone Collection.每个方法都会影响每隔一个模型
Backbone Collection.each method affects every second model
>我在从外部单击时在集合上触发"全部删除"。它看起来像这样:
绑定在集合构造函数中:
$('.empty').click => this.removeAll()
清空购物车:
removeAll: ->
this.each( (item) ->
item.setQuantity(0)
)
但 in 只影响所有其他模型。
将数量更改为 0 会触发从集合中删除。这会触发购物车的视图重新渲染,并删除未使用的(数量 == 0(模型的视图。
当我只是从回调内部登录时也会发生这种情况 - 我只收到一半的消息......编辑:当我使用控制台时.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
应该杀死他们所有人。
演示:http://jsfiddle.net/ambiguous/4nKHE/
这是怎么回事?好吧,c.each
在迭代时会跟踪它是一个元素,但c.remove
会改变底层数组,c.each
不会知道它必须调整其"当前元素"索引,所以事情会丢失。这是类"在迭代集合时更改集合"问题,带有一些橱窗装饰。
您可以通过简单地使用 reset
清空集合来避免整个反馈问题:
$('.empty').click => this.reset()
演示:http://jsfiddle.net/ambiguous/tpLXW/
整理好后,请停止绑定到集合中的用户界面元素。您确实应该在视图中.empty
,然后该视图将具有:
events:
'click .empty': 'emptyCart'
emptyCart: ->
@collection.reset()
演示:http://jsfiddle.net/ambiguous/gq3gv/
相关文章:
- 当一个模型在骨干关系中被销毁时,销毁相关模型的最佳方法是什么?
- LoopBack访问另一个模型
- 与设计用户相关联的多个模型-根据角色选择填写一个模型
- Backbone.js视图可以有一个模型和一个集合吗
- Backbone Collection.每个方法都会影响每隔一个模型
- 如何使用angularjs在一个模型中实现多个模板
- 在 Backbone 中将数据从一个模型传递到另一个模型
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- Ember.js:一个模型如何观察其他模型
- 主干:如何在视图中将一个模型替换为另一个模型
- 访问 Ember.js 中的另一个模型数据
- BackboneJS:集合初始化在视图模块中只有一个模型
- 将主干模型属性值设置为另一个模型
- AngularJS请求模型在另一个模型创建[NodeJS]之前
- AngularJS:如果ng模型被另一个模型填充,如何让它受到影响
- 如果一个模型在续集中引用自身,如何让所有孩子或父母在多对多关联中
- 创建一个模型REST API
- 在另一个模型中引用/填充猫鼬模型时出现问题
- 我应该如何创建一个作用域到另一个模型的主干集合
- 当模型依赖于另一个模型时创建模型