使用{{--each}}在(快速)手柄模板中迭代helper中的数组字符串

时间:2017-10-02 14:42:41

标签: javascript node.js handlebars.js handlebarshelper express-handlebars

我尝试使用builtin helper '{{#each}}'在手柄模板中迭代一系列字符串。 但它没有用。

简化示例:

自定义帮助函数,它返回一个字符串数组:

helpers: {
  arr: function () {
    return ['foo', 'bar'];
  }
}

访问帮助程序的模板:

{{#each arr}}
  {{@index}}: {{this}}
{{else}}
  default
{{/each}}

但是这总是打印出其他情况。 当直接访问帮助程序(没有#each)时,它会按预期结果:

{{arr}} // prints => foo,bar

我在某处读到#each需要一个可以使用的对象。在文档中的帮助器的上下文中我找不到任何关于此的东西 - 然而我试图以几种方式将返回的数组包装在一个对象中。但是我无法使它发挥作用。

那么,如何在把手模板中正确访问字符串数组(来自助手)?

1 个答案:

答案 0 :(得分:2)

subexpressions上的Handlebars文档声明如下:

  

Handlebars提供对子表达式的支持,它允许您在一个小胡子中调用多个帮助程序,并将内部帮助程序调用的结果作为参数传递给外部帮助程序。 Subexpressions由括号分隔。 [强调补充]

这意味着我们需要告诉Handlebars arr 是要在上下文对象上查找的属性,而是要调用的帮助器,我们需要通过将内部助手包装在括号中来做到这一点:

{{#each (arr)}}

话虽如此,我同意Mjh的comment,其中指出这是正确使用助手。您的数据应直接传递到模板函数以进行插值。帮助程序的目的是修改某些数据或对其执行某些逻辑。没有参数的辅助函数是一种非常刺鼻的代码味道。