在每个循环中访问Handlebars.js范围之外的变量

luc*_*e84 174 javascript each templates scope handlebars.js

我有一个handlebars.js模板,就像这样:

{{externalValue}}

<select name="test">
    {{#each myCollection}}
       <option value="{{id}}">{{title}} {{externalValue}}</option>
    {{/each}}
</select>
Run Code Online (Sandbox Code Playgroud)

这是生成的输出:

myExternalValue

<select name="test">
       <option value="1">First element </option>
       <option value="2">Second element </option>
       <option value="3">Third element </option>
</select>
Run Code Online (Sandbox Code Playgroud)

正如所料,我可以访问每个元素的idtitle字段myCollection来生成我的选择.在select之外,我的externalValue变量被正确打印("myExternalValue").

不幸的是,在期权的文本中,externalValue价值从未打印出来.

我的问题是:我怎样才能在循环内访问handlebars.js范围之外的变量?

一如既往,先谢谢.

spl*_*ter 424

尝试

<option value="{{id}}">{{title}} {{../externalValue}}</option>
Run Code Online (Sandbox Code Playgroud)

../路径段引用父模板范围,应该是你想要的.

  • 如果未来的读者仍然像我一样遇到麻烦,请在此处查看[此答案](http://stackoverflow.com/a/12297980/149998)的评论.看到这个答案之后我花了一段时间才看到那个.您可能需要重复使用`../`,具体取决于您的值的范围. (9认同)
  • 我疯了还是这种有价值的信息无处可在车把文件上找到??? (8认同)
  • @Jesse,实际上,它位于http://handlebarsjs.com/的首页;) (4认同)

小智 11

或者您可以使用如下绝对路径:

<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>
Run Code Online (Sandbox Code Playgroud)


tit*_*oih 9

我看到了很多 404 链接来获取有关此主题的文档。

我用这个更新了它,它在2020 年 4 月 1 日开始工作:

https://handlebarsjs.com/guide/expressions.html#path-expressions

#with 和 #each 等一些帮助器允许您深入研究嵌套对象。当您在路径中包含 ../ 段时,Handlebars 将变回父上下文。

    {{#each people}}
    {{../prefix}} {{firstname}} 
    {{/each}}
Run Code Online (Sandbox Code Playgroud)

即使在注释上下文中打印名称,它仍然可以返回到主上下文(根对象)以检索前缀。

警告

../ 将解析为的确切值根据调用该块的帮助程序而有所不同。仅当上下文更改时才需要使用 ../。诸如 {{#each}} 之类的助手的子代需要使用 ../,而诸如 {{#if}} 之类的助手的子代则不需要。

{{permalink}}
{{#each comments}}
  {{../permalink}}

  {{#if title}}
    {{../permalink}}
  {{/if}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

在此示例中,上述所有内容都引用相同的前缀值,即使它们位于不同的块内。此行为是 Handlebars 4 中的新行为,发行说明讨论了先前的行为以及迁移计划。