1

以下是有问题的模板:

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

问题是在屏幕上呈现的每个表格都列出了所有“滚动”(全部 100 行)。我没有过滤参数,而是尝试传递给表名 {{name}} 的 Roll 模板函数。

在 TableBox 的“table id”标签中,{{name}} 被正确转换。即“T1”、“T2”、“T3”等。但这是我需要传递给函数以正确从数据库查询中过滤的同一个 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
         },
      });
    }
}
4

1 回答 1

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>

函数的“名称”参数不需要大括号。不知何故,车把和 Meteor 可以识别您所指的没有花括号的上下文,并像在 tableBox 的 {{name}} 中一样应用它。即“T1”、“T2”、“T3”被正确传递给函数,现在我的唯一表只包含特定于单个表的滚动列表。

于 2014-03-13T06:39:44.447 回答