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


187

我有一个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>

如预期的那样,我可以访问的每个元素的idtitle字段myCollection以生成我的选择。在选择之外,我的externalValue变量已正确打印(“ myExternalValue”)。

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

我的问题是:如何从循环内部访问每个handlebars.js范围之外的变量?

Answers:


453

尝试

<option value="{{id}}">{{title}} {{../externalValue}}</option>

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


10
如果将来的读者仍然像我一样遇到麻烦,请在此处查看此答案的评论。看到这个答案,我花了一段时间才看到那个答案。您可能需要../重复使用,具体取决于距离您的值多少范围。
bcmcfc

10
我是发疯还是在手推车文档中找不到这种有价值的信息???
杰西

1
@spliter可以在余烬车把上工作。.似乎不起作用
kweku360

1
不知道@ kweku360。这适用于普通的手把。可能是Ember正在使用定制版本的车把,
该车把

1
谢谢您,这对Foundation 6 Panini也非常有效。
Marco Marco

13

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

<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>

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}}

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.