Handlebars中的#each helper并不是用括号迭代键

时间:2018-05-23 22:43:53

标签: node.js express handlebars.js

我在Node.js / Express应用程序中使用Handlebars。我有带有方括号的几个键的JSON - tools[]等。

我可以使用引号{{'tools[]'}}将这些键正常传递给Handlebars,并且应用会返回有效值。

当我尝试迭代其键位于引号中的值时 - {{#each 'tools[]'}}Something here...{{/each}}我无法获得任何结果。

是虫子吗?我使用了错误的语法吗?

可能的解决方案可能是更改JSON中的键(不使用方括号)。但是这些括号对于从enctype=multipart/form-data形式的复选框中获取多个值是必要的,更改所有这些键会非常痛苦。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

来自车把docs

  

您可能不会在路径文字中包含结尾,而是包含所有其他结果   人物是公平的游戏。

所以你唯一的方法是使用子表达式。您可以在lookup内使用内置#each帮助程序。

  

Handlebars提供对子表达式的支持,允许您使用   在一个小胡子中调用多个助手,并传入   内部帮助程序调用的结果作为外部帮助程序的参数。   Subexpressions由括号分隔。

{{#each (lookup this "tools[]")}}
    {{this}}
{{/each}}

const data = {
  "tools[]": [1,2,3,4]
};

const template = `
  {{#each (lookup this "tools[]")}}
    tools[{{@index}}]: {{this}}
  {{/each}}`;
  

console.log(Handlebars.compile(template)(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>