我有一个handlebars.js模板,就像这样:
{{externalValue}}
<select name="test">
{{#each myCollection}}
<option value="{{id}}">{{title}} {{externalValue}}</option>
{{/each}}
</select>
这是生成的输出:
myExternalValue
<select name="test">
<option value="1">First element </option>
<option value="2">Second element </option>
<option value="3">Third element </option>
</select>
正如预期的那样,我可以访问myCollection的每个元素的id和title字段来生成我的select。在select之外,我的externalValue变量被正确打印(“myExternalValue”)。
不幸的是,在options的文本中,externalValue值从未打印出来。
我的问题是:如何从循环内访问handlebars.js每个范围之外的变量?
我看到了许多带有404的关于这个主题的文档链接。
我更新了这个,它在2020年4月1日工作:
https://handlebarsjs.com/guide/expressions.html#path-expressions
一些帮助器,如#with和#each允许您深入到嵌套对象中。当你包括../分段到你的路径中,句柄会变回父上下文。
{{#each people}}
{{../prefix}} {{firstname}}
{{/each}}
即使在注释的上下文中打印了名称,它仍然可以返回到主上下文(根对象)检索前缀。
警告
确切的值是…/将根据调用块的helper解析为不同的值。使用. ./只在上下文变化时才有必要。诸如{{#each}}这样的helper的子元素需要使用..而诸如{{#if}}之类的helper的子元素则没有。
{{permalink}}
{{#each comments}}
{{../permalink}}
{{#if title}}
{{../permalink}}
{{/if}}
{{/each}}
在本例中,上述所有前缀都引用相同的前缀值,尽管它们位于不同的块中。这个行为在Handlebars 4中是新的,发布说明讨论了之前的行为以及迁移计划。
并没有回答最初的问题,但我遇到了一个类似的问题——
我有一个自定义帮助器,它没有在它里面呈现变量。
我的助手类似于把手如果助手,所以它不应该需要../路径语法。
事实证明,我在注册helper时使用了一个胖箭头函数,这在胖箭头函数中是不同的。
改变:
Handlebars.registerHelper('ifeq', (v1, v2, options) => {
to:
Handlebars.registerHelper('ifeq', function (v1, v2, options) {
为我修正了