每个辅助函数的结果?
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);
在 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);