我有一个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>
正如所料,我可以访问id
的每个元素的title
和myCollection
字段来生成我的选择。在select之外,我的externalValue
变量被正确打印(“myExternalValue”)。
不幸的是,在选项'文本中,externalValue
值永远不会打印出来。
我的问题是:我怎样才能在循环内访问handlebars.js范围之外的变量?
一如既往,提前谢谢。
答案 0 :(得分:385)
尝试
<option value="{{id}}">{{title}} {{../externalValue}}</option>
../
路径段引用应该是您想要的父模板范围。
答案 1 :(得分:4)
或者您可以使用如下绝对路径:
<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>
答案 2 :(得分:1)
我看到了很多404链接,以获取有关此主题的文档。
我对此进行了更新,它正在2020年4月1日生效:
https://handlebarsjs.com/guide/expressions.html#path-expressions
#with和#each等一些帮助器使您可以深入嵌套对象。当您在路径中包含../段时,车把将变回父级上下文。
{{#each people}}
{{../prefix}} {{firstname}}
{{/each}}
即使在注释上下文中打印名称,它仍然可以返回到主上下文(根对象)以检索前缀。
警告
../解析为的确切值根据调用该块的帮助程序而有所不同。仅在上下文更改时才需要使用../。诸如{{#each}}之类的帮助者的孩子需要使用../,而诸如{{#if}}之类的帮助者的孩子则不需要。
{{permalink}}
{{#each comments}}
{{../permalink}}
{{#if title}}
{{../permalink}}
{{/if}}
{{/each}}
在此示例中,以上所有引用相同的前缀值,即使它们位于不同的块中也是如此。此行为是从“工具栏4”开始的新功能,release notes讨论了先前的行为以及迁移计划。