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

2024-04-15

我正在为我的一个项目开发一个简单的标签模型。我已经在 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 loop, appliedTag is 不明确的.


在迭代时修改集合的内容会导致重大问题。这就是您在这里看到的问题,您正在销毁记录,这会修改正在迭代的集合。当记录从存储中删除/销毁时,Ember 的 hasMany 集合将删除记录。最简单的解决方案是将内容复制到不同的数组,当您执行此类操作时,该数组不会被修改。

this.get('appliedTags').toArray().forEach( (appliedTag)->
  console.log(Ember.inspect(appliedTag))
  appliedTag.destoryRecord()
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗? 的相关文章

随机推荐