?? Handlebars 'each' ?????????

Posted

技术标签:

【中文标题】使用 Handlebars \'each\' 循环访问父级的属性【英文标题】:Access properties of the parent with a Handlebars 'each' loop使用 Handlebars 'each' 循环访问父级的属性 【发布时间】:2012-08-31 03:33:19 【问题描述】:

考虑以下简化数据:

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

还有一个 Handlebars 模板:

#each items
    <div style="font-size:itemSizepx">this</div>
/each

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

【问题讨论】:

【参考方案1】:

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

../取消引用父作用域

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

#each items
    <div style="font-size:../itemSizepx">this</div>
    #if this.items.someKey
       <div style="font-size:../../itemSizepx">this</div>  
    /if
/each

您可以通过重复../ 来提升多个级别。例如,要上两层,请使用../../key

有关详细信息,请参阅Handlebars documentation on paths。

@root取消对根范围的引用

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

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

【讨论】:

只是关于使用 ../ 获取父属性的说明。如果您有一个带有嵌套#if 的每个语句,那么只需执行../ 只会让您达到#each 的级别。所以你必须做 ../../itemSize 才能回到#each之外的父级 如何在 mustache.js 模板引擎中获得此功能? @blushrt 你不知道。那是特定于车把的 @TheTaxPayer 你刚刚让我头疼不已!穿上袜子继续摇滚吧:) 如何将上层#each 值传递给帮助程序【参考方案2】:

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

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

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

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

#each items
 <div style="font-size:@root.viewData.itemSizepx">this</div>
/each

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

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

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

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

【讨论】:

使用“@root.itemSize”为我上一层楼。 从技术上讲,这不会上升一级 - 它会从根目录下降一级,并且只有在你下降一级时才有效。如果您不知道当前的嵌套级别,则此方法不起作用。【参考方案3】:

不幸的是 ../ 取消引用似乎无法通过部分进行。但是我们可以将属性添加到传递到部分的上下文中:

Name: parent.name

#each children
    > childpartial this parent=../parent
/each

子部分:

name is child of parent.name

更多: handlebars - is it possible to access parent context in a partial?

【讨论】:

【参考方案4】:

我们可以使用 ../parent.propertyname

访问父级

【讨论】:

以上是关于?? Handlebars 'each' ?????????的主要内容,如果未能解决你的问题,请参考以下文章

在 Handlebars 中使用带有多个变量的“#each”

在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代

使用 each 和 handlebars 助手对对象键进行排序

使用#each 显示handlebars.js 中的一些数据不显示

Handlebars.js模板

Handlebars练习