2013-03-05 3 views
6

Ich habe eine Person Modell alsWie Sideload Ember hasMany und AngleTo Relationship? Ich rufe die get_allergies Methode während andere

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

folgt Wie Sie Person hasMany „Allergien“ sehen können, und zusammen mit Person, Allergien ist auch für mich, weil in der Benutzeroberfläche immer geladen hasMANY Beziehungen wie "Besuche" und "Ereignisse" werden nicht geladen.

In UI {{}} person.get_allergies

Ich habe versucht, die Beziehungen "Besucher" und "Ereignisse" (mit Beispiel auf netto) zu Seitenbelastung, aber das nicht funktioniert? Kann jemand sagen, was die richtige Methode ist, um Glutendaten per Sideloading zu laden, weil ich mit dem Beispiel im Netz keine richtige Dokumentation finden konnte, abgesehen von einigen Fragen zum Stackoverflow selbst?

+0

können Sie

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

Meine Nutzlast sieht wie folgt aus Show das App.Admission-Modell oben? Wie sieht der JSON sowohl für die Aufnahme- als auch für die Besuchsmodelle aus, wenn Sie Ihre REST-Endpunkte manuell treffen? –

+0

@ToranBillups haben die Frage aktualisiert – Swapnil

+0

Hallo Toran, Ich habe die Frage aktualisiert ... Ich möchte nur ein richtiges Beispiel für Sideloading die Beziehung in Glut-Daten – Swapnil

Antwort

4

Entsprechend the documentation sollten Sie nur zusätzliche Besuchs- und Ereignisdaten in der Antwort vom Server hinzufügen.

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

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

Der Hauptpunkt hier ist, dass Ereignisdaten außerhalb von Personendaten sein sollten.

Verwenden Sie den Standard-REST-Adapter? Könnten Sie bitte ein Beispiel json hinzufügen, das vom Server zurückgegeben wird?

4

Um die Daten in meiner App zu laden, konfiguriere ich die Glutendaten, um zu erfahren, welche Arten von Dingen ich sideloaden werde. Z.B. Veranstaltungen und Besuche bei Seitenbelastung, dies zu tun:

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

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

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

und dann in Ihrem json kann wie folgt aussehen:

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

ich hatte das gleiche Problem, aber etwas anders aufgebaut. visits waren sich ihrer nicht bewusst (d. H. Konnten visit.get('person.name') nicht tun). Ich hatte einen Serializer für visit hinzuzufügen:

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

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

person Modell:

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

visit Modell:

export default DS.Model.extend({ 
    person: DS.belongsTo('person') 
}); 
Verwandte Themen