0

因此,我将我们的应用程序从 ember-data 0.13 移动到 ember-data 1.0,当我想查找一个类型的所有/多个记录并从中创建计算属性时,我似乎遇到了“旁加载”问题。我有一个这样的模型:

App.Event = DS.Model.extend({
    someAttributes    : DS.attr('string'),
    rel       : DS.hasMany('rel'),

    important: function () {
        var rel = this.get('rel');
        return rel.filterProperty('reactionType', 'important');
    }.property('rel'),

    whatever: function () {
        var rel = this.get('rel');
        return rel.filterProperty('reactionType', 'whatever');
    }.property('rel')
})

来自服务器的 JSON 响应如下所示:

{events:
    [{ someAttributes: 'attr1', rels: [1, 2, 4]}, 
    {someAttributes: 'attr2', rels: [3]}],
 rels:
    [{ id: 1, reactionType: "whatever" },
    { id: 2, reactionType: "important" },
    { id: 3, reactionType: "important" },
    { id: 4, reactionType: "whatever"}]
 }

那么首先,那个 JSON 响应正确吗?(还没有看到官方的例子)其次,我怎样才能让这样的计算属性工作?它适用于 ember-data 0.13。我还尝试将计算属性移动到“rel”模型,但这似乎没有任何效果。无论如何,希望这是有道理的,并感谢任何帮助。

4

1 回答 1

1

你可以试试这个。对于 hasMany,您需要有复数:rels: DS.hasMany('rel')。你需要@each。JSON 格式正确。

App.Event = DS.Model.extend({
    someAttributes    : DS.attr('string'),
    rels       : DS.hasMany('rel'),

    important: function () {
        var rel = this.get('rels.content');
        return rel.filterProperty('reactionType', 'important');
    }.property('rels.@each'),

    whatever: function () {
        var rel = this.get('rels.content');
        return rel.filterProperty('reactionType', 'whatever');
    }.property('rels.@each')
}) 

更新:将 this.get('rels') 修改为 this.get('rels.content')

于 2013-09-17T16:08:24.503 回答