如何仅在Handlebars模板中定义数组并实现循环?
问题解答
Handlebars 内置的#each和#with助手没法直接实现「在模板里定义数组并循环」的需求——它的语法不支持在模板中直接解析数组字面量,你写的['Home', 'About']会被当成普通字符串,而非数组,所以循环失效。
如果不想在JS里预先定义数组再传递给模板,最实用的方案是自定义一个极简助手:
先在JS里注册助手:
Handlebars.registerHelper('array', function() { return Array.from(arguments).slice(0, -1); });
然后在模板里这样用:
{{#each (array 'Home' 'About')}} <p>{{this}}</p> {{/each}}
要是硬抠「只用内置助手」的话,也能通过#with结合hash模拟,但写法繁琐且不实用——本质是循环对象的属性值,不是真正的数组,示例如下:
{{#with obj=(hash item1='Home' item2='About')}} {{#each obj}} <p>{{this}}</p> {{/each}} {{/with}}
这种方式需要手动给每个元素加属性名,完全没必要,还是自定义助手靠谱。
内容的提问来源于stack exchange,提问作者aboutjquery
相关产品推荐
相关产品推荐

