2015-11-26 50 views
0

此問題與this one here有關,其中我使用成分配方關係來表示項目和項目組之間的關係。在成功插入項目和組後,其中每個組中的一個字段是項目的ID的數組,問題是我如何在關聯的HTML頁面上列出這些項目和組。流星:如何使用html頁面上的遊標數組顯示列表

我試過下面的JS代碼;物品它返回遊標的直接光標,團體它(對於每組多個項目)返回一個數組(由於於存在多個組)的數組:

Recipes = new Mongo.Collection("recipes"); 
    Ingredients = new Mongo.Collection("ingredients"); 

    Template.body.helpers({ 
     ingredients: function() { 
      // return 
      var returnedingredients = Ingredients.find({}, { 
       sort: { 

        createdAt: -1 
       } 
      }); 
      // console.log(returnedingredients); 
      return returnedingredients; 
     }, 
     recipes: function() { 
      //Show newest recipes at the top 
      var itemIds = Recipes.find({}, { 
       sort: { 
        createdAt: -1 
       }, 
       // _id: 1 
      }).map(function(i) { 
       return i.itemIds; 
      }); 
      // return 
      var returnedrecipes = _.map(itemIds, function(oneRecipe) { 
       var ingredientsOfRecipe = _.map(oneRecipe, function(itemId) { 
        return Ingredients.find({}, { 
         _Id: itemId 
        }); 

       }); 
       // console.log(ingredientsOfRecipe); 
       return ingredientsOfRecipe; 
      }); 
      console.log(returnedrecipes); 
      return returnedrecipes; 
     }, 
    }); 

關聯的HTML代碼。 身體部位:

<h2>recipes</h2> 
<ul> 
    {{#each recipes}} {{> recipe}} {{/each}} 
</ul> 
<h2>List of ingredients</h2> 
<ul> 
    {{#each ingredients}} {{> ingredient}} {{/each}} 
</ul> 

模板部分:

<template name="ingredient"> 
    <li class="{{#if checked}}checked{{/if}}"> 
     <button class="delete">&times;</button> 
     <input type="checkbox" checked="{{checked}}" class="toggle-checked" /> 
     <span class="text">{{ingredientName}}</span> 
    </li> 
</template> 
<template name="recipe"> 
    <li class="{{#if checked}}checked{{/if}}"> 
     <button class="delete">&times;</button> 
     <input type="checkbox" checked="{{checked}}" class="toggle-checked" /> 
     <li> 
      <ul> 
       {{#each this}} 
       <li>{{ingredientName}}</li> 
       {{/each}} 
      </ul> 
     </li> 
    </li> 
</template> 

頁面正確顯示的項目/成分對自己的名單。但它沒有顯示組/配方列表(或者更確切地說,是爲了顯示每個配方的配料列表)。兩個問題:1.爲了在頁面上顯示食譜,從JS代碼返回遊標數組的數組是否是要走的路? 2.我在處理遊標數組時遇到了什麼錯誤?

回答

1

相關集合可以以非常直接的方式來完成:

HTML:

<template name="ListOfRecipes"> 
<h2>Recipes</h2> 
    {{#each recipes}} 
    {{> recipe}} 
    <h3>Ingredients</h3> 
    {{#each ingredients}} 
     {{> ingredient)) 
    {{/each}} 
    {{/each}} 
</template> 

JS:

Template.listOfRecipes.helpers({ 
    recipes: function(){ 
    return Recipes.find({},{sort: {createdAt: -1}}); 
    }, 
    ingredients: function(){ 
    return Ingredients.find({_id: {$in: this.itemIds}},{sort: {createdAt: -1}}); 
    } 
}); 

ingredients輔助this是獨立的配方對象。

相關問題