在模型上的 hasMany 项目上发出 destroyRecord 时出现 TypeError

TypeError when issuing destroyRecord on hasMany items on model

Ember 信息

Ember版本:2.8.3

Ember数据版本:2.8.1

损坏的代码

我在 Ember-数据模型上迭代 hasMany 关系时遇到错误。

TypeError: Cannot read property 'get' of undefined

这是出现错误的代码:

question.get('question-options').then(options => {
  options.forEach(option => {
    option.destroyRecord();
  });
});
question.set('kind', target.value);

代码的一些背景知识。 question 有一个类型,我们在更改类型时删除关联的 question-options。实际上,这只发生在非持久性问题上(没有 id)。

在上面的代码中,如果我将 option.destroyRecord() 替换为 console.log(option.get('text'))。一切正常。

我还可以通过在 forEach 之前添加 toArray() 让事情按我希望的方式工作。这就是我正在做的解决方法,但我想看看是否有人知道为什么会这样。

使用 toArray() 的工作代码

question.get('question-options').then(options => {
  options.toArray().forEach(option => {
    option.destroyRecord();
  });
});
question.set('kind', target.value);

嗯,这是预期的行为。问题是 options-hasMany 数组是一个实时数组。因此,只要您在商店中添加或删除数据,它就会更新。这就是您使用 destroyRecord 所做的事情。所以你基本上是在循环遍历数组的同时修改它。这会弄乱 forEach/只是不受支持。

我认为这样也行得通(但也不可靠):

while(options.get('firstObject')){
  options.get('firstObject').destroyRecord();
}

我认为 toArray 正确的解决方案。