我有一个 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
字段来生成我的选择。在选择之外,我的 externalValue
变量被正确打印(“myExternalValue”)。
不幸的是,在选项的文本中,externalValue
值永远不会打印出来。
我的问题是:如何从循环内访问每个 handlebars.js 范围之外的变量?
尝试
<option value="{{id}}">{{title}} {{../externalValue}}</option>
../
路径段引用应该是您想要的父模板范围。
或者你可以像这样使用绝对路径:
<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>
我看到了许多与 404 相关的链接,以获取有关此主题的文档。
我用这个更新它,它在 2020 年 4 月 1 日工作:
https://handlebarsjs.com/guide/expressions.html#path-expressions
一些像#with 和#each 这样的助手允许你深入嵌套对象。当您在路径中包含 ../ 段时,Handlebars 将变回父上下文。
{{#each people}}
{{../prefix}} {{firstname}}
{{/each}}
即使在注释上下文中打印名称,它仍然可以返回主上下文(根对象)以检索前缀。
警告
../ 将解析为的确切值因调用块的帮助程序而异。仅在上下文发生变化时才需要使用 ../。 {{#each}} 等助手的子级需要使用 ../ 而 {{#if}} 等助手的子级则不需要。
{{permalink}}
{{#each comments}}
{{../permalink}}
{{#if title}}
{{../permalink}}
{{/if}}
{{/each}}
在此示例中,所有上述内容都引用相同的前缀值,即使它们位于不同的块中。此行为是 Handlebars 4 中的新行为,release notes 讨论了先前的行为以及迁移计划。
../
,具体取决于距离您的值有多少范围。