句柄中的全局变量if blocks

Dan*_*ter 10 handlebars.js

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

<ul>
{{#each people}}
    <li>
        <p>{{firstName}}</p>
        {{#if displayLastnames}}
        <p>{{lastName}}</p>
        {{/if}}
    </li>
{{/each}}
</ul>
Run Code Online (Sandbox Code Playgroud)

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

Alb*_*ocq 16

您还可以注册名为"displayLastnames"的全局帮助程序,并在if中使用它:

  Handlebars.registerHelper('displayLastnames', function(block) {
    return displayLastnames; //just return global variable value
  });
Run Code Online (Sandbox Code Playgroud)

并在样本中使用它:

  {{#if displayLastnames}}
    <p>{{lastName}}</p>
  {{/if}}
Run Code Online (Sandbox Code Playgroud)


mu *_*ort 9

Handlebars命名空间变量,因此您无法直接访问全局变量.可能最简单的方法是添加自己的帮助器,这样简单:

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

然后在你的模板中:

{{#if_displayLastnames}}
<p>{{lastName}}</p>
{{/if_displayLastnames}}
Run Code Online (Sandbox Code Playgroud)

您可能希望将"全局"变量放在自己的命名空间中.

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

  • @DansKnow请参阅"Block Helpers"文档的"条件"部分:https://handlebarsjs.com/block_helpers.html#conditionals (2认同)