問題のテンプレートは次のとおりです。
<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 ハンドルバーの機能は次のとおりです。
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」などですが、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
},
});
}
}