Meteor Handlebars将上一个Context Context参数传递给下一个{{#Each}}帮助程序块

时间:2014-03-12 17:13:01

标签: mongodb meteor handlebars.js meteor-helper

以下是相关模板:

<template name="tables">
    <div class="table-area">
        {{#each tableList}}
          {{> tableBox}}
        {{/each}}
    </div>
</template>

<template name="tableBox">
<table id="{{name}}" class="table table-condensed table-striped">
    <tr>
        <td>{{name}}</td>
        <td> Min:</td>
        <td>{{minBet}}</td>
        <td>{{cPlayers}}</td>
    </tr>
    <tr>
        <td>Dice1</td>
        <td>Dice2</td>
        <td>Dice3</td>
        <td>Total</td>
    </tr>
    {{#each table [{{name}}]}}
      {{> tableRow}}
    {{/each}}
    </table>
</template>

<template name="tableRow">
    <tr>
        <td>{{Roll.dice1}}</td>
        <td>{{Roll.dice2}}</td>
        <td>{{Roll.dice3}}</td>
        <td>{{Roll.total}}</td>
    </tr>
</template>

以下是Meteor Handlebars的功能:

Template.tables.tableList = function(){
    return Tables.find();
}

Template.tableBox.table = function(tableID){
    return Rolls.find({tableName: tableID});
}

问题是在屏幕上呈现的每个表都包含了所有的&#39; Rolls&#39;列出(全部100行)。我试图将参数传递给Roll模板函数,而不是对参数进行过滤,而该模板函数是表名{{name}}。

在&#34;表id&#34; TableBox的标记,{{name}}被正确转换。即&#34; T1&#34;,&#34; T2&#34;,&#34; T3&#34;但是,我需要传递给函数以正确地从db查询中过滤掉相同的TableID。有没有办法更简单地做到这一点?如果可能的话,我想坚持在这里模仿做事的把手。

以下参考是测试数据的JSON初始化代码:

//initiate tables
for (i = 1; i < 11; i++) {
    Tables.insert({
        name: 'T' + i,
        minBet: '300',
        cPlayers: '(8)'
    });
}

//initiate rolls within tables
for (i = 1; i < 11; i++) {
for(j=1; j<11; j++){
var die1 = ((Math.floor(Math.random() * 5) +1).toString());
var die2 = ((Math.floor(Math.random() * 5) +1).toString());
var die3 = ((Math.floor(Math.random() * 5) +1).toString());
var t = (parseInt(die1) + parseInt(die2) + parseInt(die3)).toString();

Rolls.insert({
    Roll: {
        tableName: 'T' + i,
        rollNumber: j;
        dice1: die1,
        dice2: die2,
        dice3: die3,
        total: t
         },
      });
    }
}

1 个答案:

答案 0 :(得分:2)

好的 - 经过反复试验 - 弄明白了:

在辅助函数中:

Template.tableBox.table = function(tableID){
    return Rolls.find({"Roll.tableName": tableID});
}

我需要添加嵌套的Roll.tableName属性名称,但在括号内作为查询。

返回tableBox模板:

<template name="tableBox">
  <table id="{{name}}" class="table table-condensed table-striped">
    <tr>
        <td>{{name}}</td>
        <td> Min:</td>
        <td>{{minBet}}</td>
        <td>{{cPlayers}}</td>
    </tr>
    <tr>
        <td>Dice1</td>
        <td>Dice2</td>
        <td>Dice3</td>
        <td>Total</td>
    </tr>
    {{#each table name}}
      {{> tableRow}}
    {{/each}}
  </table>
</template>

该函数的'Name'参数不需要花括号。不知怎的,把手和Meteor在没有花括号的情况下识别你所指的上下文,并将其应用于tableBox的{{name}}内。即“T1”,“T2”,“T3”正确传递给函数,现在我的唯一表只包含特定于各个表的卷列表。