我正在为我的一个项目开发一个简单的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
未定义。
答案 0 :(得分:6)
迭代时修改集合的内容将导致重大问题。这就是你在这里看到的问题,你正在破坏记录,这会修改正在迭代的集合。 Ember的hasMany集合将在从商店中删除/销毁时删除记录。最简单的解决方案是将内容复制到另一个不会在执行这些操作时修改的数组。
this.get('appliedTags').toArray().forEach( (appliedTag)->
console.log(Ember.inspect(appliedTag))
appliedTag.destoryRecord()
)