Handlebarsjs:如何在每个循环中获取变量?

时间:2014-05-22 09:02:10

标签: javascript loops if-statement handlebars.js

我正在尝试使用Handlebars templating engine从浏览器中编译一些模板。我现在使用每个循环构建一个下拉列表,我想要选择其中一个选项。为此,我复制了一个帮手(来自this SO answer),如下所示:

Handlebars.registerHelper('if_eq', function(a, b, opts) {
    if(a == b)
        return opts.fn(this);
    else
        return opts.inverse(this);
});

然后我将以下物品提供给车把:

{
    "adminUsers": [
        {
            "adminUsername": "user1"
        },
        {
            "adminUsername": "user2"
        },
        {
            "adminUsername": "user3"
        }
    ],
    "assignedAdminUser": "user2"
}

在我的Handlebars模板中,我这样做:

{{#each adminUsers}}
    {{#if_eq adminUsername assignedAdminUser }}
        <option selected>{{adminUsername}}</option>
    {{else}}
        <option>{{adminUsername}}</option>
    {{/if_eq}}
{{/each}}

但遗憾的是,没有选择任何选项。当我简单地填写'a'和'a'时,平等助手确实有效,但不知何故,在#each循环中,assignedAdminUser不可用。我可以使用循环外部的{{assignedAdminUser}}轻松回显它,但它内部似乎不可用。

有人知道如何检查循环中的adminUser是否等于分配的用户,以便我可以将该选项设置为选中状态吗?欢迎所有提示!

1 个答案:

答案 0 :(得分:1)

each循环中,您处于adminUser对象的上下文中。这些对象没有assignedAdminUser属性,这就是每次if_eq检查失败的原因。

使用

{{#if_eq adminUsername ../assignedAdminUser}}

代替。