2016-07-25 6 views
2

Da der glut-Führer erklärt, wie mutliple Modelle auf einer Route zu laden, wie dieEmber.js: Laden Sie im Zusammenhang mehr Modelle

export default Ember.Route.extend({ 
    model() { 
    return Ember.RSVP.hash({ 
     songs: this.get('store').findAll('song'), 
     albums: this.get('store').findAll('album') 
    }); 
    } 
}); 

Im fragen, wie von einem zweiten nur die entsprechenden Modell-Einträge zu laden, Wie alle Songs Laden der Alben, sondern nur die in den Songs indiziert sind, wenn wir, dass das Lied Modell dieses

... 
albums: hasMany('album'), 
... 

Wie kann ich das tun enthält annehmen?

+0

Sie sollten die Alben zusammen mit den Songs seitenweise laden oder die Songs im Model Hook abrufen und die Alben im afterModel Hook mit den Song-IDs aus dem Modell –

Antwort

2

Angenommen, Ihre Adapter und JSON API Backend-Unterstützung es, können Sie einfach sagen:

export default Ember.Route.extend({ 
    model() { 
    return Ember.RSVP.hash({ 
     songs: this.get('store').findAll('song', { include: 'albums' }), 
    }); 
    } 
}); 

Normalerweise ist dies eine GET-/songs?include=albums erzeugen, die die JSON API Backend erzählt die dazugehörige Album Ressourcen enthalten, nach zu http://jsonapi.org/format/#fetching-includes.

Auf der Emberseite der Dinge ist diese Funktion bei http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html#toc_code-ds-finder-include-code dokumentiert.

Wenn das obige keine Option ist, gibt es keine Möglichkeit, alles in einer Anforderung zu laden, ohne einen benutzerdefinierten Endpunkt zu erstellen und store.pushPayload zu verwenden.

0

ist hier eine Möglichkeit, es zu tun

export default Ember.Route.extend({ 
    model() { 
    var promise = new Ember.RSVP.Promise(function(resolve,reject){ 
     this.store.findAll('song').then(function(songs){ 
     var albumPromises = songs.map(fuction(s){return s.get('album')}); 
     Em.RSVP.all(albumPromises).then(function(){ 
      resolve(songs); 
     }); 
     }); 
    }); 
    return promise; 
    } 
}); 

Also im Grunde Sie warten, bis alles gelöst ist.

Hoffe es hilft!

+0

songs.map abfragen (fuction (s) {return s .get ('Album')}); -> Ist diese Rückkehrversprechenserklärung für Ihre Antworten zum besseren Verständnis erforderlich? – kumkanillam

+1

ja s.get ('album') wird Versprechen zurückgeben, weil es eine Beziehung ist, die später geladen wird. –

Verwandte Themen