我目前正在Meteor中构建一个quizz应用程序,并且在帮助程序中有三个功能
Template.quizPage.helpers({
//this helper finds the currentquiz and returns the currentquestion to the template
question: function(){
currentquiz = this.quiztitle;
currentQuestion = Session.get('currentQuestion') || 0;
return Quizzes.findOne({'quiztitle': currentquiz}).quizquestions[currentQuestion]
},
length: function (){
questionlength = $(Quizzes.findOne({'quiztitle': currentquiz}).quizquestions).length;
return questionlength;
},
answers: function(){
currentquiz = this.quiztitle;
currentQuestion = Session.get('currentQuestion') || 0;
return Quizzes.findOne({'quiztitle': currentquiz}).answers[1][currentQuestion]
}
});
正如您所看到的,这些代码中的一些已经重复(currentquiz = this.quiztitle)。 如何在帮助程序中的函数之间共享currentquiz?
这成为一个真正的问题,因为我需要一次定义变量currentquiz
currentQuestion = [0,0,0,0,0];
但是,当我在模板中激活帮助程序时,当前代码会重置当前问题。我可以在函数$(document.ready)wrap上面定义它来设置变量或定义它。这真的很容易吗?
答案 0 :(得分:0)
我知道这是一个老线程,但我遇到了同样的问题。您可以做的是在模板级别定义一个反应变量:
var abc;
Template.XY.rendered = function(){
abc = new ReactiveVar("abc");
},
Template.XY.helpers({
someFunction:function(){
return abc.get();
}
)}
我定义了一个var abc;
来将变量绑定到模板实例(我想这也可以用this.abc = new ...
完成)
答案 1 :(得分:0)
要提供模板助手和事件中可用的变量,您只需将其添加到模板实例中。
在 onCreated 功能中,您可以使用关键字 this 访问模板实例。
Template.myTemplate.onCreated(function(){
this.mySharedVariable = new ReactiveVar("myValue");
});
在帮助程序中,您可以使用 Template.instance()访问templace实例。
Template.myTemplate.helpers({
myHelper1(){
const instance = Template.instance();
instance.mySharedVariable.get(); // Get the value "myValue"
// Do something
},
myHelper2(){
const instance = Template.instance();
instance.mySharedVariable.get(); // Get the value "myValue"
// Do something
}
});
在事件中,您可以使用函数的第二个参数访问模板实例。
Template.myTemplate.events({
'click .js-do-something' : function(event, instance){
instance.mySharedVariable.set("newValue"); // Set the value "newValue"
}
});
在上面的示例中,我使用了ReactiveVar,因此如果其值发生变化,则会重新执行两个帮助 myHelper1 和 myHelper2 。但可以根据需要随意使用正常变量。
PS:因为会话是全球性的,如果你只使用这个"分享"你不应该使用Session 模板中的变量。