10

是否可以在 Handlebars 条件中使用全局变量?我正在编写一个列出很多对象的应用程序,我希望用户能够控制列出哪些详细信息。例如,在人员列表中仅显示名字,如下所示:

<ul>
{{#each people}}
    <li>
        <p>{{firstName}}</p>
        {{#if displayLastnames}}
        <p>{{lastName}}</p>
        {{/if}}
    </li>
{{/each}}
</ul>

我不想实际修改数据(例如,通过删除 lastName 属性并执行{{#if lastName}})。

4

2 回答 2

17

您还可以注册一个名为“displayLastnames”的全局助手并在 if 中使用它:

  Handlebars.registerHelper('displayLastnames', function(block) {
    return displayLastnames; //just return global variable value
  });

并在您的示例中使用它:

  {{#if displayLastnames}}
    <p>{{lastName}}</p>
  {{/if}}
于 2013-02-12T12:02:29.493 回答
11

Handlebars 为变量命名空间,因此您不能直接访问全局变量。可能最简单的方法是添加您自己的帮助程序,如下所示:

Handlebars.registerHelper('if_displayLastnames', function(block) {
    if(displayLastnames)
        return block.fn(this);
    else
        return block.inverse(this);
});

然后在您的模板中:

{{#if_displayLastnames}}
<p>{{lastName}}</p>
{{/if_displayLastnames}}

当然,您可能希望将“全局”变量放在它们自己的命名空间中。

演示:http: //jsfiddle.net/ambiguous/Y34b4/

于 2012-08-03T06:52:45.127 回答