从Meteor模板中将多个参数传递给helper?

时间:2017-12-07 09:09:58

标签: javascript meteor

这是我的问题: 我有一个数组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];
            }
      }
  }
});

1 个答案:

答案 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