所以我将我们的应用程序从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'模型,但这似乎没有任何效果。 无论如何,希望有意义,并感谢任何帮助。
答案 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')