我有一个人员模型如下
App.Person= DS.Model.extend({
id: DS.attr('string'),
name: DS.attr('string'),
visits: DS.hasMany('App.Visit'),
events: DS.hasMany('App.Event') ,
allergies: DS.hasMany('App.Allergies'),
get_allergies : function(){
return this.get('allergies').getEach('allergy_name').reduce(function(accum, item) {
return (accum.length > 0) ? (accum +', '+ item) : (item);
}, '');
}.property('allergies.@each.allergy_name')
});
App.Visit = DS.Model.extend({
visit_id: DS.attr('string'),
date: DS.attr('date'),
admission: DS.belongsTo('App.Admission')
});
App.Admission = DS.Model.extend({
loc: DS.attr('string'),
admission_date: DS.attr('date'),
care_team: DS.belongsTo('App.CareTeam')
});
正如你所看到的人有很多“过敏症”,并且与人一起,过敏症也为我加载,因为在UI中我称之为get_allergies方法,而其他人有很多关系,如“访问”和“事件”没有得到加载。
在用户界面{{person.get_allergies}}
中我试图加载关系“访问”和“事件”(使用网络上的示例),但这不起作用?有人可以说出正确加载余烬数据的方法是什么,因为除了关于stackoverflow本身的几个问题之外我无法在网上找到任何适当的文档吗?
答案 0 :(得分:4)
根据the documentation,您应该在服务器的响应中添加其他访问和事件数据。
{
"person": {
"id": 1,
...
"event_ids": [5, 6, 7]
},
"events": [{
"id": 5,
...
},
{
"id": 6,
...
},
{
"id": 7,
...
}]
}
这里的要点是事件数据应该在人员数据之外。
您使用标准REST适配器吗?你能加一个服务器返回的样本json吗?
答案 1 :(得分:4)
要在我的应用程序中加载数据,我配置ember-data以了解我将要加载的各种内容。例如。要加载事件和访问,请执行以下操作:
DS.RESTAdapter.configure('App.Event', {
sideloadsAs: 'events'
});
DS.RESTAdapter.configure('App.Visit', {
sideloadsAs: 'visits'
});
App.Store = DS.Store.extend({
revision: 11
});
然后在你的json中看起来像这样:
{
"person": {
"id": 1,
"event_ids": [5, 6, 7],
"visit_ids": [1, 2, 3]
},
"events": [
{ "id": 5 },
{ "id": 6 },
{ "id": 7 }
],
"visits": [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 }
]
}
答案 2 :(得分:0)
我遇到了同样的问题,但设置有点不同。 visits
没有意识到他们的person
(即无法做visit.get('person.name')
)。我必须为visit
添加序列化器:
export default AppSerializer.extend({
attrs: {
person: 'personId'
},
});
我的有效载荷如下所示:
{
person: {
id: 1,
name: 'John',
visitIds: [1, 2, 3]
},
visits: [
{ id: 1,
personId: 1
},
{ id: 2,
personId: 1
},
{ id: 3,
personId: 1
}
]
}
person
型号:
export default DS.Model.extend({
name: DS.attr('string'),
visits: DS.hasMany('visit')
});
visit
型号:
export default DS.Model.extend({
person: DS.belongsTo('person')
});