Javascript 使用手柄访问父级的属性';每个';环

Javascript 使用手柄访问父级的属性';每个';环,javascript,handlebars.js,Javascript,Handlebars.js,考虑以下简化数据: var viewData = { itemSize: 20, items: [ 'Zimbabwe', 'dog', 'falafel' ] }; 和把手模板: {{#each items}} <div style="font-size:{{itemSize}}px">{{this}}</div> {{/each}} {{#每个项目} {{this}} {{/每个}} 这将不起作用,因为在每个循环中

考虑以下简化数据:

var viewData = {
    itemSize: 20,
    items: [
        'Zimbabwe', 'dog', 'falafel'
    ]
};
和把手模板:

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

这将不起作用,因为在
每个
循环中,父作用域是不可访问的——至少在我尝试过的任何方式下都是不可访问的。我希望有办法做到这一点

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

使用
。/
通过在属性名称前面加上
。/
,可以引用父范围

{{#each items}}
    <div style="font-size:{{../itemSize}}px">{{this}}</div>
    {{#if this.items.someKey}}
       <div style="font-size:{{../../itemSize}}px">{{this}}</div>  
    {{/if}}
{{/each}}
{{#每个项目}
{{this}}
{{{如果是this.items.someKey}
{{this}}
{{/if}
{{/每个}}
通过重复
。/
,您可以提升多个级别。例如,要提升两个级别,请使用
。/../key

有关更多信息,请参阅

使用
@root
通过将
@root
前置到属性路径,可以从最顶端的范围向下导航(如中所示)


有关更多信息,请参阅。

新方法使用点表示法,不推荐使用斜线表示法()

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

@root.grandfather.father.element
@root.father.element
在您的具体示例中,您将使用:

{{#each items}}
 <div style="font-size:{{@root.viewData.itemSize}}px">{{this}}</div>
{{/each}}
将创建一个键和值变量,子级可以在没有 对depthed变量引用的需要。在上面的示例中,{{key}}>与{{@../key}}相同,但在许多情况下更具可读性


不幸的是../dereference似乎不能通过partials工作。但我们可以将属性添加到传递到分部的上下文中:

Name: {{parent.name}}

{{#each children}}
    {{> childpartial this parent=../parent}}
{{/each}}
儿童部分:

{{name}} is child of {{parent.name}}
更多:

我们可以使用{{../parent.propertyname}}访问父级

只需注意使用../获取父级属性即可。如果您有一个带有嵌套的each语句#If then just do./只会让您达到#each的级别。因此,您必须执行.././itemSize才能返回到#eachHow我可以在mustache.js模板引擎中获得此功能吗?@blushrt您没有。那是把手specific@TheTaxPayer你刚刚帮我省去了大量的头痛!穿上袜子继续摇滚:)把一个较高的级别传递给一个助手怎么样?#每个值使用“@root.itemSize”为我上一个级别。从技术上讲,这不是上一个级别-它是从根上下一个级别,只有在你下一个级别时才有效。如果不知道当前嵌套级别,则此方法不起作用。
{{name}} is child of {{parent.name}}