我目前使用Ember Data 1.0.0-beta.14.1和Ember 1.9.1(使用Ember-cli)。不知何故,我的一个集合不再起作用,因为我从较旧的 ember 数据版本更新。
我有一个目录模型(用于文件系统)。目录可以有子目录和文件。
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 })
});
A 有一个序列化程序来加载哈希许多相关:
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}}
不知何故,文件循环最终导致错误。看起来像 arrayWillChange 中的问题"无法调用未定义的方法'销毁'",只有在我的情况下,我只是从服务器加载数据。我不明白我做错了什么,因为孩子关系确实很好。在旧版本中,这只是有效的,但是对于Ember Data 1.0.0-beta.14.1,它不会...
我查看了arrayWillChange
函数的余烬代码,发现this._childViews
只是一个空数组。但是,如果我设置断点并在控制台中执行this.get('content.content').toArray()
,则会看到一个包含一个元素的数组。不知何故/某处似乎数据不同步......
它是Ember Data 1.0.0-beta.14.1中的一个错误。它在下一个版本中解决了,Ember Data 1.0.0-beta.15:https://github.com/emberjs/data/issues/2662
我遇到了同样的错误,我也使用链接来加载数据。我意外发现的是将数组包装成类似的东西
files: function() {
return this.get('directory.files').map(function(file) { return file; });
}.property('directory.files.@each')
解决了问题。
不知道为什么它:)工作