在模型

时间:2016-12-13 17:45:30

标签: ember.js ember-data

Ember Info

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);

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

在上面的代码中,如果我将option.destroyRecord()替换为console.log(option.get('text'))。事情很好。

我还可以通过在toArray()之前添加forEach来按照我希望的方式开展工作。这就是我正在做的解决方案,但我想知道是否有人有任何想法,为什么它这样做。

使用toArray()的工作代码

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

1 个答案:

答案 0 :(得分:1)

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

我认为(也不可靠)这样的东西也会起作用:

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

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