使用Handlebars的“each”循环访问父项的属性
考虑下面的简化数据:
var viewData = { itemSize: 20, items: [ 'Zimbabwe', 'dog', 'falafel' ] };
和一个把手模板:
{{#each items}} <div style="font-size:{{itemSize}}px">{{this}}</div> {{/each}}
这是行不通的,因为在each
循环中,父范围是不可访问的 – 至less不是我试过的任何方式。 我希望有一个这样做的方式!
事实certificate,通过将../
添加到属性名称是可能的:
{{#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
。
有关更多信息,请参阅path上的Handlebars文档 。
新方法使用点符号,斜杠符号已被弃用( 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 array as |value key|}} {{#each child as |childValue childKey|}} {{key}} - {{childKey}}. {{childValue}} {{/each}} {{/each}}
将创build一个键和值variables,孩子可以访问,而不需要清空variables引用。 在上面的例子中,{{key}}>与{{@ .. / key}}完全相同,但在很多情况下,它更具可读性。