2013-03-05 67 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') 
});