使用Ember-data和Ember.js,我尝试使用一个JSON请求加载两个模型。这些模型的关系类似于:
App.Person = DS.Model.extend({
name: DS.attr('string'),
dogs: DS.hasMany('App.Dog'),
});
App.Dog = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('App.Person'),
});
我的服务器正在发送这样的JSON:
{
"dog": {
"id": 1,
"name": "Fido",
"owner": {
"id": 1,
"name": "John Smith",
"dogs": [1]
}
}
}
...但是,Ember-data仍然向我的服务器发送请求(使用findQuery),试图获得所有者JSON。
我有一个jsFiddle设置,演示它here。要观察问题,您需要转到此链接以激活路线/模板:
http://fiddle.jshell.net/6kQ8s/2/show/#/dog/1
我还没有在我的适配器中定义findQuery()因为我不需要它来获取我已发送的数据......对吗?
有谁知道我在这里做错了什么?
答案 0 :(得分:2)
我正在执行以下操作(使用ember-data revision 8)
App.Dog = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('App.Person', { embedded: true }),
});
此外,我必须告诉序列化程序加载此关系的映射。 虽然它不是必需的,但我使用的是自己的DS.Serializer子类。在初始化时 序列化程序加载Person类的映射的时间,该类指定了该类 应加载嵌入式关系。
App.WOSerializer = DS.Serializer.extend({
init: function(){
this._super();
this.map(App.Dog, {
person: {
embedded: 'load'
}
});
});
提问者编辑:
需要在适配器中初始化序列化程序。
App.adapter = DS.Adapter.create({
// ...
serializer: App.WOSerializer.create()
});
答案 1 :(得分:0)
尝试使用embedded
属性。
App.Dog = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('App.Person', { embedded: true }),
});