2017-10-15 115 views
0

我很努力地理解如何從兩個相關模型中獲取數據來顯示。Ember:從模板訪問多對多數據

我有一個食譜,可以有很多的標籤,並且可以有許多食譜標籤:

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

我想從我的食譜路線做這樣的事情(通過一個組成部分):

//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}} 

如果我輸出{{ recipe.tags }},我得到一個<DS.PromiseManyArray>

我該如何解決這個承諾?

我嘗試添加{include: tags}到我的食譜路線 - 但它似乎並沒有有所作爲:

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

我的數據:

enter image description here

在此先感謝

回答

0

外貌就像您在輸出標籤時缺少名稱(即{{tag.name}}

這是否適合您?否則,你所擁有的一切看起來正確...

//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> 

此外,日後調試的目的,你也可以使用{{debugger}}{{log recipes}}追查什麼錯誤

+0

不,不幸的是,這不是工作要麼。另外,如果我輸出'recipe.tags.length',我會得到0,儘管存在與配方相關的標籤。 –

+0

是的,該數據信息是有幫助的。它看起來像你的後端沒有發送標籤信息作爲標準的JSON:API對象,這將解釋Ember Data的混亂。具體來說,你的標籤是*嵌入*而不是*包含*。爲了匹配JSON:API規範,您需要在每個食譜中有一個「關係」關鍵字,其中包含關於哪些標記與所涉及的配方鏈接的信息。如果你看一下這個主頁上的例子:http://jsonapi.org/你需要匹配'relationships.data'方法。這有幫助嗎? – acorncom