每个辅助函数的结果?

each over the result of a helper function?

在 handlebars 中,我注册了一个 returns 列表的辅助函数,例如:

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.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);