使用 {{#each}} 在 (express-)handlebars 模板中迭代来自 helper 的字符串数组

Iterate over array of strings from helper in (express-)handlebars template with {{#each}}

我正在尝试使用 builtin helper '{{#each}}' 遍历车把模板中的字符串数组。 但是没用。

简化示例:

自定义辅助函数,其中 returns 一个字符串数组:

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

访问助手的模板:

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

但这总是打印 else 的情况。 当直接访问助手(没有#each)时,结果如预期:

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

我在某处读到#each 需要一个对象来处理。我在文档中的助手上下文中找不到任何关于此的信息 - 尽管如此,我还是尝试以多种方式将返回数组包装在一个对象中。但是我无法让它工作。

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

subexpressions 上的 Handlebars 文档说明如下:

Handlebars offers support for subexpressions, which allows you to invoke multiple helpers within a single mustache, and pass in the results of inner helper invocations as arguments to outer helpers. Subexpressions are delimited by parentheses. [emphasis added]

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

{{#each (arr)}}

话虽如此,我同意 Mjh 的 ,即 不是 助手的正确用法。您的数据应直接传递给模板函数以进行插值。助手的目的是修改某些数据或对其执行某些逻辑。没有参数的辅助函数是一种非常刺鼻的代码气味。