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

Dav*_* K. 4 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
Run Code Online (Sandbox Code Playgroud)

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

Kin*_*n2k 6

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

this.get('appliedTags').toArray().forEach( (appliedTag)->
  console.log(Ember.inspect(appliedTag))
  appliedTag.destoryRecord()
)
Run Code Online (Sandbox Code Playgroud)