【问题标题】:Meteor Handlebars Passing Previous Context Parameter to next {{#Each}} helper blockMeteor Handlebars 将前一个上下文参数传递给下一个 {{#Each}} 辅助块
【发布时间】:2014-04-17 00:38:54
【问题描述】:

以下是有问题的模板:

<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 行)。我没有过滤参数,而是尝试传递给 Roll 模板函数,即表名 {{name}}。

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

【问题讨论】:

    标签: mongodb meteor handlebars.js meteor-helper


    【解决方案1】:

    好的 - 经过反复试验 - 想通了:

    在辅助函数中:

    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}} 中一样应用它。 IE。 “T1”、“T2”、“T3”已正确传递给函数,现在我的唯一表仅包含特定于各个表的滚动列表。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2015-12-31
      • 2018-05-12
      • 2013-09-10
      • 2018-04-06
      • 2016-04-01
      相关资源
      最近更新 更多