【问题标题】:each over the result of a helper function?每个辅助函数的结果?
【发布时间】:2015-05-22 07:09:12
【问题描述】:

在车把中我注册了一个返回列表的辅助函数,例如:

function myHelper() {
    return [
        'some val 1',
        'some val 2',
        'some val 3'
    ]
}

我想调用该函数并使用 Handlebars 迭代结果,如下所示:

{{#each myHelper}}
<li>{{this}}</li>
{{/each}}

但是这并没有调用我的函数,我认为它在上下文中寻找一个名为 myHelper 的变量,而不是函数。

有没有办法做到这一点,还是我需要在页面呈现之前将myHelper() 的结果作为变量添加到上下文中?

我正在使用 Node、Express 和 handlebars-express

【问题讨论】:

    标签: javascript handlebars.js


    【解决方案1】:

    在 JavaScript 中,函数是对象,所以理论上你可以这样做(未经测试)。

    Handlebars.registerHelper('each', function(context, options) {
    
       // Execute context if it's a function to get the array
       if(typeof context == "function")
         context = context();
      
      var ret;
      
      for(var i=0, j=context.length; i<j; i++) {
        ret += options.fn(context[i]);
      }
    
      return ret;
    });

    然后在你的代码中...

    function myHelper() {
        return [
            'some val 1',
            'some val 2',
            'some val 3'
        ]
    }
    
    var context = {myHelper: myHelper};
    var html    = template(context);

    【讨论】:

    • 不错的解决方案。当辅助函数在上下文中定义时,这似乎有效,但当它被定义为全局辅助函数时,传递的函数参数以未定义的形式出现。
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2014-01-23
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多