这是我的问题: 我有一个数组Array:allAnswers,我想在表中显示它的行。 问题是我想在我调用它时将值设置为正确的位置。 我试过这个,但它仍然不起作用。
模板名称= body
中的HTML文件<table>
<tr>
<th>Week/Questions</th>
<th>Q1</th>
<th>Q2</th>
<th>Q3</th>
<th>Q4</th>
</tr>
<tr>
<td>Week</td>
<td>{{allAnswers "0"}}</td>
<td>{{allAnswers "1"}}</td>
<td>{{allAnswers "2"}}</td>
<td>{{allAnswers "3"}}</td>
</tr>
</table>
JS档案
Template.body.helpers({
allAnswers: function(N) {
var i=N;
for(i=0;i<10;i++){
var allAnswers(i)=[];
for(var j=0; j<4; j++){
allAnswers(i)[j+1] = Quests.find({ userId: this._id, answer: { $exists: true }}).map((el) => el.answer[j]);
alert(allAnswers(i)[j]);
return allAnswer(i)[j];
}
}
}
});
答案 0 :(得分:0)
我建议在Blaze中更改大头钉并使用循环助手来构建表格,如下所示:
<table>
<tr>
<th>Week/Questions</th>
<th>Q1</th>
<th>Q2</th>
<th>Q3</th>
<th>Q4</th>
</tr>
{{#each week in quests}}
<tr>
<td>Week</td>
{{#each answer in week}}
<td>{{answer}}</td>
{{/each}}
</tr>
{{/each}}
</table>
JS档案
Template.body.helpers({
quests() {
return Quests.find({
userId: Meteor.user(),
answer: { $exists: true }
});
}
});
这个想法是你的助手返回数据光标一次,然后你的模板负责在页面上直观地构造数据。
另一种方法是在Template.body.onCreated
中构建二维数组,然后从那里引用数据。这会禁用任何反应性,因此当基础数据发生变化时,表格不会更新。
重要的是要注意,每次在模板中引用帮助程序时,以及每次使用的反应数据源都会更改(在本例中为Quests集合)。
还应注意userId检查应在服务器端的数据发布中完成。 The Meteor tutorial有更多相关信息。
如果您对Meteor中的数据流感到困惑,我也强烈推荐这篇文章: https://medium.com/meteor-js/data-flow-from-the-database-to-the-ui-three-layers-of-meteor-d5e208b466c3