TypeError:无法读取属性' destroy'未定义的 - Ember

时间:2015-01-15 16:46:44

标签: ember.js ember-data ember-cli

我现在使用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(),我会看到一个包含一个元素的数组。不知何故/某处似乎数据不同步......

2 个答案:

答案 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')

解决了这个问题。

不知道为什么会这样:)