【问题标题】:Global function for Meteor template helperMeteor 模板助手的全局函数
【发布时间】:2014-01-08 00:36:29
【问题描述】:

我已经注册了一个这样的全局函数:

Handlebars.registerHelper('dialogBoxOptions', function (callbackFunctionName){
    return {
        callBack: callbackFunctionName
    };
});

但是当我尝试如下访问它时,我得到 dialogBoxOptions is not defined

Template.myLlist.helpers({
    dOpt: dialogBoxOptions('dlgCB')
});

我已经尝试将其作为全局车把助手和常规 javascript 函数,但得到相同的结果。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    在 Meteor 1.0+ 中,创建全局帮助器的语法现在看起来是:

    Template.registerHelper('functionName',function(param1,param2){
      ... your code here ...
    })
    

    然后在客户端的任何地方使用它:

    var result = Blaze._globalHelpers.functionName(param1, param2);
    

    OTOH,UI 对象没有出现在当前的 documentation 中,所以我想知道这种用法是否有福。

    【讨论】:

      【解决方案2】:

      您无法通过这种方式访问​​车把助手,您可以在模板中访问它们:

      <template name="myList">
           {{dialogBoxOptions.callback 'something'}}
      </template>
      

      如果你想像现在这样在你的助手中访问它,你应该注册一个全局方法。你可以把它放在像/lib/helpers.js这样的文件中

      dialogBoxOptions = function (callbackFunctionName){
          return {
              callBack: callbackFunctionName
          };
      }
      

      另外,如果你想创建一个全局模板助手,现在的语法是:

      Template.registerHelper("dialogBoxOptions", function (param2) {
          return true;
      });
      

      【讨论】:

      • 谢谢,我尝试了一个全局 javascript 函数,但我认为它位于错误的位置,放入 /lib 似乎已经成功了。注意:使用“function dialogBoxOptions(callbackFunctionName)”时它不起作用,我必须使用你的语法 - 为什么会这样?
      • function xx() 是变量范围的,因此它只在其定义的文件中起作用,同样var xx = function() 也被限制在文件中。如果没有 var 关键字,它对所有文件都是可见的。 /lib 是首先加载的,所以也许这就是为什么它在你把它移到那里之后才起作用
      • 在这种情况下,dialogBoxOptions 将如何访问,例如,模板实例中的 Collection 订阅?
      【解决方案3】:

      使用Template.registerHelper(name, function)
      如图Meteor Documentation

      【讨论】:

        【解决方案4】:

        现在有一种方法可以访问已注册的全局帮助器。

        //Register the helper
        UI.registerHelper("functionName", function (param1, param2) {
          return true;
        });
        
        //Use the helper elsewhere
        var result = UI._globalHelpers('functionName')(param1, param2);
        

        【讨论】:

        • UI.registerHelper 不是为 Template.helpers 贬值了吗?在这种情况下,访问 Template.helpers 的语法是什么?也许是 Template._globalHelpers?
        • @Aaron: Template.registerHelper 是正确的方法:docs.meteor.com/#/full/template_registerhelper
        • @erb 我现在正在使用 registerHelper(s)。谢谢。 :)
        • 有点hack,但是在Template.registerHelper({...})之后,你可以从Blaze._globalHelpers['func_name']获取函数。
        猜你喜欢
        • 1970-01-01
        • 2015-01-06
        • 2018-01-20
        • 2015-09-14
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 2015-10-10
        相关资源
        最近更新 更多