在Meteor.js中的template.rendered中调用辅助函数,1.0中的错误,0.9.3中的罚款

时间:2014-11-04 13:07:16

标签: javascript meteor

为了避免重复代码,我发现有一个可以在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()并调用它们?或者设置这个作为注册助手功能?

2 个答案:

答案 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();;
  },

我有同样的问题,这是我使用的解决方案。希望有所帮助。