我正在使用Meteor 1.0。
我有一个Template.*name*.rendered
函数可以进行大量计算。在计算结束时,我希望输出进入Template.*name*.helpers
,以便我可以在相应的html页面中使用它。
以下是代码的简化版本:
Template.myTemplate.rendered = function () {
var x = Math.random();
Template.otherTemplate.helpers({
randomNum: x
});
}
当我在{{randomNum}}
中拨打otherTemplate
时,没有任何反应。
我还尝试将Template.*name*.helpers
放在Template.*name*.rendered
之外,在这种情况下,我收到错误:
Uncaught ReferenceError: x is not defined
思想?
答案 0 :(得分:5)
这不是真正正确的方式,因为Meteor的工作方式是在应用程序启动之前编译模板,而不是在运行时。虽然这些行可能是可能的(例如通过使用Template.registerHelper),但在rendered
回调中将反应变量设置为特定值会更好。将帮助器设置为返回:
Session.setDefault('randomNum', 0);
Template.myTemplate.rendered = function () {
Session.set('randomNum', Math.random());
}
Template.otherTemplate.helpers({
randomNum: Session.get('randomNum')
});
如果您更愿意为randomNum
使用私有变量,请查看ReactiveVar。它可以是任何反应数据源,它可以工作。
答案 1 :(得分:1)
您曾经将辅助工具创建为模板的对象,但由于Meteor已弃用,您现在必须在辅助函数中创建帮助程序。
现在,为了通过javascript调用帮助程序,您必须使用此函数
Template.*TemplateName*.__helpers.get('*HelperName*')(*Params*);
这是一种非常简单的方法,它可以使函数远离全局范围,因此非常干净。
以下是我如何使用此
的示例~~~
Template.home.events({
'click .pair': function(event) {
var _this = $(event.currentTarget);
Template.home.__helpers.get('pairDevice')(_this);
}
});
Template.home.helpers({
'devices' : function() {
return Session.get('devices');
},
'pairDevice' : function(elm) {
elm.fadeOut();
$('.home-page').addClass('paired');
var deviceList = [
{
'name' : 'Patrick\'s Phone',
'UUID' : '234123,4n123k4nc1l2k3n4 l1k23n4l12k3nc4l12'
},
{
'name' : 'Mike\'s Phone',
'UUID' : '734k23k4l2k34l2k34l2k34l2k3m'
},
{
'name' : 'Edgar\'s Phone',
'UUID' : '567k56l7k4l56k7l5k46l74k56l74k5'
}
];
Session.set('devices', deviceList);
}
});
~~~