如何在流星查找方法中传递可变参数

问题描述:

使用“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> 

问题分贝收集

{ "_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" ] } 

我的预感是,当你设置的参数模板帮手questions(qnum)它期望一个,但在{{#each questions}}位,你不通过任何ING。尝试在template.helper DEF删除qnum中,使之成为

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

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

要真正让您的帮手重新运行按钮单击,您需要使查询参数(qnum)无效。在这里,流星提供了各种选择,最明显的就是将您的qnum值存储在会话中。

Session.set("qnum", qnum) 

,然后在模板助手查询

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

谢谢,现在它返回的对象。然而,我面临的另一个问题是,按钮的按钮递增的值不会通过Questions.find方法返回。 –

+0

我更新了我的答案,请检查它是否适用于您。 – tomsp