2013-03-05 60 views
6

我有一个角色模型如下如何加载ember hasMany和belongsTo关系?

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('[email protected]_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') 
}); 

正如你可以看到人的hasMany“过敏”,并与人一起,过敏症也越来越因为UI加载对我来说我打电话,而其他的get_allergies方法有许多关系,如“访问”和“事件”没有得到加载。

在UI {{person.get_allergies}}

我试图侧向载荷的关系“访问”和“事件”(例如使用净),但不工作?有人可以告诉什么是负载数据的正确方式,因为我不能找到任何正确的文件与网络上的例子,除了在stackoverflow本身几个问题?

+0

可以吗显示上面的App.Admission模型?如果您手动打入REST端点,那么json对于入场和访问模式都会是什么样子? – 2013-03-05 11:46:53

+0

@ToranBillups已更新问题 – Swapnil 2013-03-05 11:59:50

+0

嗨Toran,我已经更新了这个问题......我只是想要一个适当的例子,在ember-data中加载关系 – Swapnil 2013-03-07 06:14:28

回答

4

根据the documentation,您应该在服务器的响应中添加其他访问和事件数据。

{ 
    "person": { 
    "id": 1, 
    ... 
    "event_ids": [5, 6, 7] 
    }, 

    "events": [{ 
    "id": 5, 
    ... 
    }, 
    { 
    "id": 6, 
    ... 
    }, 
    { 
    "id": 7, 
    ... 
    }] 
} 

这里的要点是事件数据应该在Person数据之外。

您是否使用标准REST适配器?你可以添加一个由服务器返回的示例json吗?

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 } 
    ] 
} 
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') 
}); 
相关问题