我尝试使用builtin helper '{{#each}}'在手柄模板中迭代一系列字符串。 但它没有用。
简化示例:
自定义帮助函数,它返回一个字符串数组:
helpers: {
arr: function () {
return ['foo', 'bar'];
}
}
访问帮助程序的模板:
{{#each arr}}
{{@index}}: {{this}}
{{else}}
default
{{/each}}
但是这总是打印出其他情况。 当直接访问帮助程序(没有#each)时,它会按预期结果:
{{arr}} // prints => foo,bar
我在某处读到#each需要一个可以使用的对象。在文档中的帮助器的上下文中我找不到任何关于此的东西 - 然而我试图以几种方式将返回的数组包装在一个对象中。但是我无法使它发挥作用。
那么,如何在把手模板中正确访问字符串数组(来自助手)?
答案 0 :(得分:2)
subexpressions上的Handlebars文档声明如下:
Handlebars提供对子表达式的支持,它允许您在一个小胡子中调用多个帮助程序,并将内部帮助程序调用的结果作为参数传递给外部帮助程序。 Subexpressions由括号分隔。 [强调补充]
这意味着我们需要告诉Handlebars arr
不是要在上下文对象上查找的属性,而是要调用的帮助器,我们需要通过将内部助手包装在括号中来做到这一点:
{{#each (arr)}}
话虽如此,我同意Mjh的comment,其中指出这是不正确使用助手。您的数据应直接传递到模板函数以进行插值。帮助程序的目的是修改某些数据或对其执行某些逻辑。没有参数的辅助函数是一种非常刺鼻的代码味道。