在ember数据中,在forEach循环中调用destroyRecord会破坏循环?

时间:2014-09-07 23:35:42

标签: ember.js ember-data

我正在为我的一个项目开发一个简单的Tag模型。我在Angular中实现了类似的东西,但我想在Ember中尝试一下。型号代码如下

Tag = DS.Model.extend {
  name:DS.attr('string')
  user:DS.belongsTo('user')
  appliedTags:DS.hasMany('AppliedTag')

  obliterate:()->
    #destory the associated applied tags
    this.get('appliedTags').forEach( (appliedTag)->
      console.log(Ember.inspect(appliedTag))
      appliedTag.destoryRecord()
    )
    #destory the record
    this.destroyRecord()
}

fixtures = [
    id:1
    name:'Category 1'
    user:1
    appliedTags:[1,5]
]

Tag.reopenClass
  FIXTURES: fixtures

如果我发表评论appliedTag.destoryRecord(),一切都会好的。但是,在第二次forEach循环中,appliedTag 未定义

1 个答案:

答案 0 :(得分:6)

迭代时修改集合的内容将导致重大问题。这就是你在这里看到的问题,你正在破坏记录,这会修改正在迭代的集合。 Ember的hasMany集合将在从商店中删除/销毁时删除记录。最简单的解决方案是将内容复制到另一个不会在执行这些操作时修改的数组。

this.get('appliedTags').toArray().forEach( (appliedTag)->
  console.log(Ember.inspect(appliedTag))
  appliedTag.destoryRecord()
)