2017-09-16 4 views
0

Ich habe bestimmte Zweifel in Bezug auf Ember Data. Ich habe ein Post- und Kommentarmodell.Lade Beziehungsmodell in Ember Daten

//post.js 
comments: DS.hasMany('comment') 

//blog.js 
post: DS.belongsTo('post') 

kann ich einen Kommentar für einen bestimmten „post“ erstellen mit

let blogPost = this.get('store').findRecord('post', 1); 
let comment = this.get('store').createRecord('comment', { 
    post: blogPost 
}); 

Aber wie kann ich holen alle Kommentare für einen bestimmten Beitrag? Wie, ich habe mehrere Beiträge, die viele Kommentare haben, und ich möchte alle Kommentare für eine bestimmte Post-ID, sagen Beiträge/id/Kommentare

Was den richtigen Weg ist, um die Kommentare für eine bestimmte Post-ID aus dem holen Geschäft und Server?

Die Serverantwort, die ich bekomme, ist nur die IDs der Kommentare, während "findRecord" einen Post liest. Ich befolge das REST-API-Format und verwende REST-Adapter und REST-Serializer für Anpassungen.

Vielen Dank im Voraus.

Antwort

1

Es gibt viele Möglichkeiten, diese Datensätze in den Speicher zu laden. Wie Sie es tun, hängt davon ab, wie das Backend eingerichtet ist. Die einfachsten Optionen verwenden die untergeordneten Datensätze in einer Vorlage oder eine Abfrage. Die folgenden Anweisungen gelten nur für Apps, die einen REST-Adapter verwenden (da JSONAPI-Anfragen standardisiert sind).

Beginnen wir mit der Verwendung der Datensätze in einer Vorlage.

In der Strecke holen den Pfosten, und bringen Sie es in dem Modell Haken:

// post.js route  
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.store.findRecord('post', params.post_id) 
    }, 
}); 

Führen Sie das Modell und seine untergeordneten Datensätze auf eine Komponente:

// post.hbs route template 
{{some-component comments=model.comments}} 

Dann, dass die Kommentare verwenden Komponente:

{{#each comments as |comment|}} 
    <p>{{comment.note}}<p> 
{{/each}} 

Sie sollten feststellen, dass die Verwendung der Kommentare in einer Vorlage GET-Anforderungen auslöst Um die IDs, die wieder mit Ihrer ersten Post holen, wie /comments/1, /comments/2 usw. In der Komponente Aktionen kamen, können Sie die Kommentare als this.get('comments')

Zugriff Eine weitere Option ist ein Abfrage-Parameter angeben, empfangen und verarbeitet werden, indem das hintere Ende.

// post.js route  
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.store.query('comments', {post: params.post_id}) 
    }, 
}); 

Der obige Code wird eine GET-Anfrage Kommentare/machen? Post = 1. Das Backend ist verantwortlich für das Filtern durch die Datenbank und das Zurückgeben nur der Datensätze, die zu dem Post gehören. Da Modell eine Sammlung von Kommentaren ist, würden Sie die Ergebnisse der oben genannten in einer Vorlage wie folgt verwenden:

{{#each model as |comment|}} 
    <p>{{comment.note}}</p> 
{{/each}} 
+0

Ich möchte Ihnen nur sagen, Ihre Antworten sind großartig mit detaillierten Erklärung. Bitte mach weiter so. – kumkanillam

+0

Danke, ich möchte die Kommentare wie, post/postID/Kommentare nicht wie oben erwähnt. Ist es möglich, das natürlich ohne Anpassung in Adaptern anzufordern? – Mohanesh

+0

Nein, Sie müssten einen Adapter erstellen und urlFor überschreiben, um geschachtelte URLs auszuführen. Eine andere Möglichkeit ist ein Addon wie https://github.com/amiel/ember-data-url-templates – handlebears