小编典典

使用 Handlebars 'each' 循环访问父级的属性

all

考虑以下简化数据:

var viewData = {
    itemSize: 20,
    items: [
        'Zimbabwe', 'dog', 'falafel'
    ]
};

还有一个把手模板:

{{#each items}}
    <div style="font-size:{{itemSize}}px">{{this}}</div>
{{/each}}

这不起作用,因为在each循环中,父范围不可访问——至少我尝试过的任何方式都没有。我希望有办法做到这一点!


阅读 68

收藏
2022-06-10

共1个答案

小编典典

有两种有效的方法可以实现这一点。

取消引用父范围../

通过添加../到属性名称之前,您可以引用父范围。

{{#each items}}
    <div style="font-size:{{../itemSize}}px">{{this}}</div>
    {{#if this.items.someKey}}
       <div style="font-size:{{../../itemSize}}px">{{this}}</div>  
    {{/if}}
{{/each}}

您可以通过重复../. 例如,要上两个级别,请使用../../key.

有关详细信息,请参阅有关路径的 Handlebars
文档

取消引用根范围@root

通过添加@root到属性路径,您可以从最高范围向下导航(如caballerog的答案所示)。

新方法使用点表示法,斜杠表示法已弃用(http://handlebarsjs.com/expressions.html)。

因此,访问父元素的实际方法如下:

@root.grandfather.father.element
@root.father.element

在您的具体示例中,您将使用:

{{#each items}}
 <div style="font-size:{{@root.viewData.itemSize}}px">{{this}}</div>
{{/each}}

官方文档(http://handlebarsjs.com/builtin_helpers.html)中的另一种方法是使用别名

each 助手还支持块参数,允许在块中的任何位置命名引用。

js {{#each array as |value key|}} {{#each child as |childValue childKey|}} {{key}} - {{childKey}}. {{childValue}} {{/each}} {{/each}}

将创建一个孩子可以访问的键和值变量,而无需深入的变量引用。在上面的示例中,{{key}} > 与 {{@../key}} 相同,但在许多情况下更具可读性。

有关更多信息,请参阅有关 @data 变量的 Handlebars 文档

2022-06-10