如何在meteor find方法中传递变量参数

时间:2015-07-12 07:10:49

标签: javascript mongodb meteor

使用" qnum"进行查找查询时变量参数作为一个值,它不会返回任何数据。是由于对象内部变量范围的限制吗?

Quiz.js文件

Questions = new Mongo.Collection("questions");

if (Meteor.isClient) {

  var qnum = 1;

  Template.question.events({

    "click #submit-btn": function (event, template) {
      //Increment question number when user click on submit button which loads the next question
      qnum += 1;
    }

  });


  Template.body.helpers({
    questions: function (qnum) {
      return Questions.find({qnum: qnum});
    }
  });
}

Quiz.html文件

<div class="quiz">
    <div class="score-board">
        {{#each questions}}
            {{> question}}
        {{/each}}
    </div>
</div>
</body>

<template name="question">
    <div class="qa-wrapper" id="{{qnum}}">
        <div class="questions">{{title}}</div>
        <div class="options">
                {{#each options}}
                <input type="checkbox" name="{{this}}"/>{{this}} <br />
                {{/each}}
            <button id="submit-btn">Submit</button>
        </div>
    </div>
</template>

问题db collection

{ "_id" : ObjectId("55a207a21c4dbe14cf9837c7"), "qnum" : 1, "title" : "Question 1", "options" : [ "A", "B", "C", "D" ] }
{ "_id" : ObjectId("55a207b31c4dbe14cf9837c8"), "qnum" : 2, "title" : "Question 2", "options" : [ "A", "B", "C", "D" ] }

1 个答案:

答案 0 :(得分:1)

我的预感是,当您为模板助手questions(qnum)设置参数时,它会预期一个,但是在{{#each questions}}位中您不会传递任何内容。尝试删除template.helper def中的qnum in,使其成为

Template.body.helpers({
  questions: function () {
    return Questions.find({qnum: qnum});
  }
});

未经测试。让我知道它是否有效。

要实际让助手重新运行按钮单击,您需要使查询参数(qnum)具有反应性。在这里,Meteor提供了各种选择,最明显的是将qnum值存储在会话中。

Session.set("qnum", qnum)

然后在模板助手查询中

return Questions.find({qnum: Session.get("qnum") });