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
来按照我希望的方式开展工作。这就是我正在做的解决方案,但我想知道是否有人有任何想法,为什么它这样做。
question.get('question-options').then(options => {
options.toArray().forEach(option => {
option.destroyRecord();
});
});
question.set('kind', target.value);
答案 0 :(得分:1)
那就是预期的行为。问题是options
- hasMany
- 数组是一个实时数组。因此,只要您在商店中添加或删除数据,它就会更新。这就是你用destroyRecord
做的事情。所以你基本上在循环时修改数组。而这只会导致forEach
/不被支持。
我认为(也不可靠)这样的东西也会起作用:
while(options.get('firstObject')){
options.get('firstObject').destroyRecord();
}
我认为使用toArray
是正确的解决方案。