基于侧载关系的计算属性

时间:2013-09-17 15:21:23

标签: ember.js ember-data

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

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'模型,但这似乎没有任何效果。 无论如何,希望有意义,并感谢任何帮助。

1 个答案:

答案 0 :(得分: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')