我正在为我的一个项目开发一个简单的标签模型。我已经在 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
是未定义。
最佳答案
在迭代时修改集合的内容会导致重大问题。这就是您在这里看到的问题,您正在销毁记录,这会修改正在迭代的集合。当记录从存储中删除/销毁时,Ember 的 hasMany 集合将删除记录。最简单的解决方案是将内容复制到不同的数组,当您执行此类操作时,该数组不会被修改。
this.get('appliedTags').toArray().forEach( (appliedTag)->
console.log(Ember.inspect(appliedTag))
appliedTag.destoryRecord()
)
关于ember.js - 在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715738/