2017-09-16 6 views
0

J'ai quelques doutes concernant les données Ember. J'ai un modèle de publication et commentaires.Modèle de relation de chargement dans les données Ember

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

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

Je peux créer un commentaire pour un "post" particulier à l'aide

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

Mais comment puis-je chercher tous les commentaires pour un poste particulier? Comme, j'ai plusieurs messages qui a de nombreux commentaires et je veux tous les commentaires pour un identifiant de poste particulier, disons messages/id/commentaires

Quelle est la bonne façon de récupérer les commentaires pour un identifiant de poste en particulier de la magasin et serveur?

La réponse du serveur que j'obtiens est seulement l'id des commentaires tandis que "findRecord" un poste. Je suis le format de l'API REST et utilise l'adaptateur REST et le sérialiseur REST pour les personnalisations.

Merci d'avance.

Répondre

1

Il existe plusieurs façons de charger ces enregistrements dans le magasin. La façon dont vous choisissez de le faire dépend de la configuration de l'arrière-plan. Les options les plus simples utilisent les enregistrements enfants dans un modèle ou effectuent une requête. Les instructions ci-dessous ne s'appliquent qu'aux applications utilisant un adaptateur REST (puisque les requêtes JSONAPI sont standardisées).

Commençons par utiliser les enregistrements dans un modèle.

Dans la route, aller chercher le poste et le retourner dans le crochet de modèle:

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

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

passer le modèle et ses dossiers enfants à un composant:

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

Ensuite, utilisez les commentaires dans ce composant:

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

Vous devriez constater que l'utilisation des commentaires dans un modèle déclenche des requêtes GET aux ids qui est revenue avec votre message initial chercher, comme /comments/1, /comments/2, etc. Dans les actions du composant, vous pouvez accéder aux commentaires que this.get('comments')

Une autre option est de spécifier un paramètre de requête à recevoir et traitées par l'extrémité arrière.

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

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

Le code ci-dessus va faire une demande GET à/comments? Post = 1. Le back-end est responsable du filtrage à travers la base de données et ne renvoie que les enregistrements qui appartiennent à la publication. Puisque model est une collection de commentaires, vous utiliserez les résultats de ce qui précède dans un modèle comme celui-ci:

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

Je veux juste vous dire que vos réponses sont excellentes avec des explications détaillées. Continuez s'il vous plaît le bon travail. – kumkanillam

+0

Merci, je voudrais demander les commentaires comme, post/postID/commentaires pas comme mentionné ci-dessus. Est-il possible de demander ainsi naturellement sans utiliser de personnalisations dans les adaptateurs? – Mohanesh

+0

Non, vous devez créer un adaptateur et remplacer urlFor pour faire des URLs imbriquées. Une autre option consiste à utiliser un addon comme https://github.com/amiel/ember-data-url-templates – handlebears