在模型上的 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
是 正确的解决方案。
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
是 正确的解决方案。