0

我正在尝试使用内置帮助器 '{{#each}}'遍历车把模板中的字符串数组。但它不起作用。

简化示例:

一个返回字符串数组的自定义辅助函数:

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

访问助手的模板:

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

但这总是打印 else 情况。当直接访问帮助程序(不带#each)时,结果如预期:

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

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

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

4

1 回答 1

2

Handlebars 关于子表达式的文档说明如下:

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

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

{{#each (arr)}}

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

于 2017-10-03T00:44:04.587 回答