句柄中的全局变量if blocks

时间:2012-08-03 06:35:51

标签: handlebars.js

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

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

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

2 个答案:

答案 0 :(得分:16)

您还可以注册名为“displayLastnames”的全局帮助程序,并在if:

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

只需在样本中使用它:

  {{#if displayLastnames}}
    <p>{{lastName}}</p>
  {{/if}}

答案 1 :(得分:9)

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/