是否可能在Handlebars条件中使用全局变量?我正在编写一个列出很多对象的应用程序,我希望用户能够控制列出的详细信息。例如,在人员列表中仅显示名字,如下所示:
<ul>
{{#each people}}
<li>
<p>{{firstName}}</p>
{{#if displayLastnames}}
<p>{{lastName}}</p>
{{/if}}
</li>
{{/each}}
</ul>
我不想实际修改数据(例如,删除lastName属性并执行{{#if lastName}}
)。
答案 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}}
您可能希望将“全局”变量放在自己的命名空间中。