为了避免重复代码,我发现有一个可以在foo.rendered函数中调用的辅助函数很有用(例如)。为什么这在Meteor的0.9.3中是可能的,但在1.0中会引发错误?
Template.foo.helpers({
'fooFn' : function(){
return "something"
}
});
Template.foo.rendered = function(){
var something = Template.foo.fooFn();
}
我是否应该更改foo.rendered中的语法(我称之为错误?)或者可能完全使用不同的方法(在helpers({})之外设置函数和render()并调用它们?或者设置这个作为注册助手功能?
答案 0 :(得分:5)
从Meteor 1.0.3.1开始,可以找到并调用辅助函数,虽然很明显它不应该像这样使用。
仍然可以做到:
Template.foo.__helpers[" fooFn"]()
请注意功能名称的前导空格。
处理此问题的另一种方法是将函数附加到全局命名空间,然后从代码中的其他位置调用该函数,如user3557327
所述。
此外,您可以使用:
Template.registerHelper('myHelper', function (){return 'Look At Me!'})
注册一个全局帮助器,并使用:
显式调用它UI._globalHelpers['myHelper']()
答案 1 :(得分:1)
我认为这是一种更好的方法:How to use Meteor methods inside of a template helper
定义一个函数并将其附加到模板。从渲染中调用该函数,以及模板助手。就像MrMowgli所说的那样,你可能并不认为"从.js文件中调用模板助手,只能从将来可能会破坏的......中调用。
例如,定义一个函数并将其附加到tamplate:
Template.Play.randomScenario = function () { // HACK HACK HACK }
然后从生命周期方法中调用它
Template.Play.created = function () {
Template.Play.randomScenario();
};
scenario: function () {
return Template.Play.randomScenario();;
},
我有同样的问题,这是我使用的解决方案。希望有所帮助。