2013-03-05 18 views
6

Tôi có một mẫu người như sauLàm thế nào để sideload ember hasMany và thuộcToTo Relationship?

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') 
}); 

Như bạn có thể nhìn thấy Người hasMany "dị ứng", và cùng với người, dị ứng cũng được nhận được nạp cho tôi vì trong UI Tôi gọi phương thức get_allergies khi khác hasMany mối quan hệ như "lượt truy cập" và "sự kiện" không được tải.

Trong giao diện người dùng {{}} person.get_allergies

Tôi cố gắng để sideload các mối quan hệ "thăm" và "sự kiện" (sử dụng ví dụ trên net), nhưng điều đó không làm việc? Ai đó có thể cho biết cách thích hợp của sideloading ember-data là gì bởi vì tôi couldnt tìm thấy bất kỳ tài liệu thích hợp với ví dụ trên mạng, ngoại trừ vài câu hỏi về stackoverflow chính nó?

+0

thể bạn chỉ mô hình App.Admission ở trên? cũng như những gì các json trông giống như cho cả nhập học và các mô hình thăm nếu bạn tự hit các thiết bị đầu cuối REST của bạn? –

+0

@ToranBillups đã cập nhật câu hỏi – Swapnil

+0

Xin chào Toran, tôi đã cập nhật câu hỏi ... Tôi chỉ muốn một ví dụ thích hợp về việc tải trước mối quan hệ trong dữ liệu ember – Swapnil

Trả lời

4

Theo the documentation, bạn chỉ cần thêm dữ liệu Lượt truy cập và Sự kiện bổ sung vào phản hồi từ máy chủ.

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

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

Điểm chính ở đây là dữ liệu Sự kiện phải nằm ngoài dữ liệu Person.

Bạn có sử dụng bộ điều hợp REST chuẩn không? Bạn có thể vui lòng thêm một mẫu json trả về bởi máy chủ?

4

Để tải dữ liệu trong ứng dụng của tôi, tôi định cấu hình dữ liệu ember để biết về các loại nội dung tôi sẽ tải về. Ví dụ. để sideload các sự kiện và các chuyến thăm, làm việc này:

DS.RESTAdapter.configure('App.Event', { 
    sideloadsAs: 'events' 
}); 

DS.RESTAdapter.configure('App.Visit', { 
    sideloadsAs: 'visits' 
}); 

App.Store = DS.Store.extend({ 
    revision: 11 
}); 

và sau đó trong json của bạn có thể trông như thế này:

{ 
    "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

tôi đã cùng một vấn đề nhưng thiết lập một chút khác nhau. visits không biết về số person của mình (tức là không thể thực hiện visit.get('person.name')). Tôi đã có thêm một serializer cho visit:

export default AppSerializer.extend({ 
    attrs: { 
    person: 'personId' 
    }, 
}); 

tải trọng của tôi trông như thế này:

{ 
    person: { 
    id: 1, 
    name: 'John', 
    visitIds: [1, 2, 3] 
    }, 

    visits: [ 
    { id: 1, 
     personId: 1 
    }, 
    { id: 2, 
     personId: 1 
    }, 
    { id: 3, 
     personId: 1 
    } 
    ] 
} 

person mô hình:

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    visits: DS.hasMany('visit') 
}); 

visit mô hình:

export default DS.Model.extend({ 
    person: DS.belongsTo('person') 
}); 
Các vấn đề liên quan