我现在使用Ember Data 1.0.0-beta.14.1和Ember 1.9.1(使用Ember-cli)。不知怎的,我的一个集合不再起作用了,因为我从旧的ember数据版本更新。
我有一个DirectoryModel(用于文件系统)。目录可以包含子目录和文件。
import DS from 'ember-data';
var DirectoryModel = DS.Model.extend({
...
parent: DS.belongsTo('directory', { async: true, inverse: 'children' }),
children: DS.hasMany('directory', { async: true, readOnly: true, inverse: 'parent' }),
files: DS.hasMany('file', { async: true, readOnly: true })
});
有一个序列化器来加载hashMany的关系:
export default ApplicationSerializer.extend({
normalizePayload: function(payload) {
payload.directories.forEach(function(directory) {
directory.links = {
children: '/link-to-server'),
files: 'link-to-server')
};
});
return this._super.apply(this,arguments);
}
});
我的观点:
//WORKS GREAT
{{#each directory in children itemController="file-directory"}}
...
{{/each}}
CREATES ERRORS
{{#each file in files }}
...
{{/each}}
不知何故,文件循环最终导致错误。它看起来像问题"Cannot call method 'destroy' of undefined" in arrayWillChange,只是在我的情况下我只是从服务器加载数据。我不明白我做错了什么,因为孩子关系确实运作良好。在旧版本中,这只是起作用,但是对于Ember Data 1.0.0-beta.14.1,它不会...
我查看了arrayWillChange
函数的ember代码,发现this._childViews
只是一个空数组。但是如果我在控制台中设置断点并执行this.get('content.content').toArray()
,我会看到一个包含一个元素的数组。不知何故/某处似乎数据不同步......
答案 0 :(得分:2)
最后,它是Ember Data 1.0.0-beta.14.1中的一个错误。它已在下一版本Ember Data 1.0.0-beta.15:https://github.com/emberjs/data/issues/2662
中得到解决答案 1 :(得分:1)
我遇到了同样的错误,我也使用链接来加载数据。我不小心发现的是用
之类的东西包装数组files: function() {
return this.get('directory.files').map(function(file) { return file; });
}.property('directory.files.@each')
解决了这个问题。
不知道为什么会这样:)