2017-10-15 6 views
0

J'ai du mal à comprendre comment afficher les données de deux modèles liés.Ember: Accéder à de nombreuses données à partir du modèle

J'ai une recette qui peut avoir de nombreuses balises et une étiquette qui peut avoir de nombreuses recettes:

//models/recipe.js 
export default DS.Model.extend({ 
    name: DS.attr('string'), 
    tags: DS.hasMany('tag') 
}); 

//models/tag.js 
export default DS.Model.extend({ 
    name: DS.attr('string'), 
    tags: DS.hasMany('recipe') 
}); 

Je suis en train de faire quelque chose comme ça de ma route recettes (via un composant):

//templates/components/list-recipes.hbs 
<ul> 
    {{#each recipes as |recipe|}} 
    <li>{{recipe.name}} - {{#each recipe.tags as |tag|}} {{tag}} {{/each}}</li> 
    {{/each}} 
</ul> 

//templates/recipes.hbs 
{{list-recipes recipes=model}} 

Si je produis {{ recipe.tags }}, j'obtiens un <DS.PromiseManyArray>.

Comment puis-je résoudre cette promesse?

J'ai essayé d'ajouter {include: tags} à mes recettes itinéraire - mais il ne semble pas faire une différence:

//routes/recipes.js 
export default Route.extend({ 
    model() { 
    return this.get('store').findAll('recipe', {include: 'tags'}); 
    } 
}); 

Mes données:

enter image description here

Merci à l'avance

Répondre

0

Looks comme si le nom vous manquait lors de la sortie de votre tag (par exemple {{tag.name}})

Est-ce que cela fonctionne pour vous? Tout ce que vous avez l'air bien ...

//templates/components/list-recipes.hbs 
<ul> 
    {{#each recipes as |recipe|}} 
    {{! line below updated slightly }} 
    <li>{{recipe.name}} - {{#each recipe.tags as |tag|}} {{tag.name}} {{/each}}</li> 
    {{/each}} 
</ul> 

également, à des fins de débogage futurs, vous pouvez également utiliser {{debugger}} ou {{log recipes}} pour traquer ce qui va mal

+0

Non, malheureusement qui ne fonctionne pas non plus. De plus, si je renvoie 'recipe.tags.length', j'obtiens 0, bien qu'il y ait des balises associées à la recette. –

+0

Oui, cette information de données est utile. Il semble que votre backend n'envoie pas les informations sur les tags en tant qu'objet JSON: API standard, ce qui expliquerait la confusion de Ember Data. Plus précisément, vos tags sont * incorporés * au lieu de * inclus *. Pour correspondre à la spécification JSON: API, vous devez avoir une clé 'relations' dans chacune de vos recettes contenant des informations sur les tags liés à la recette en question. Si vous jetez un oeil à l'exemple sur la page d'accueil ici: http://jsonapi.org/ vous devez correspondre à l'approche 'relationships.data'. Est ce que ça aide? – acorncom