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

标签 ember.js ember-data

我正在为我的一个项目开发一个简单的标签模型。我已经在 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/

相关文章:

javascript - 当对象初始化时,如何获取 ember 对象的唯一 id?

ember.js - 夹具中的嵌入记录错误 : "Cannot call method ' hasOwnProperty' of undefined

ember.js - 回滚对 Ember 数据模型的所有更改的最佳方法

ember.js - ember.js 中的全局函数

javascript - Ruby on Rails 在应用程序 Erb 文件内的 Javascript 中嵌入 Ruby 代码

ember.js - 覆盖 buildURL 方法以包含父模型的 id

node.js - 解析托管静态文件 URL 别名

javascript - Ember 组绑定(bind)

javascript - 使用 ember-data 的非 CRUD 操作

templates - ember.js 和嵌套模板/ View