可能在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)
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/