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

标签 javascript handlebars.js

考虑以下简化数据:

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

还有一个 Handlebars 模板:

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

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

最佳答案

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

使用 ../

取消对父作用域的引用

通过在属性名称前添加 ../,您可以引用父作用域。

{{#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 documentation on paths .

使用 @root

取消对根范围的引用

通过在属性路径前添加 @root,您可以从最顶层范围向下导航(如 caballerog's answer 所示)。

有关详细信息,请参阅 Handlebars documentation on @data variables .

关于javascript - 使用 Handlebars 'each' 循环访问父级的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297959/

相关文章:

javascript - meteor :重复使用具有不同数据的模板

javascript - 使用 JavaScript 从嵌套 JSON 对象中的值获取上层键?

代码隐藏语法中的 javascript

javascript - 无法理解如何在 typeahead 0.10.1 中使用 alt 模板引擎

javascript - 定制 Handlebars 助手

jquery - Emberjs-1.0.0-rc.6 点击动态添加更多或多个输入字段

javascript - 如何在相同距离 : Solution without Masonry? float 具有可变高度的 div

javascript - 将文本框附加到 dojo 中的 div

javascript - AngularJS 加载个人用户配置文件

handlebars.js - 如何在 Handlebars 中引用当前迭代的对象