我需要渲染一个表格,其中包含在用户具有管理员权限时将显示的链接。我有一个#forEach,里面有一个{{#if isAdmin}}。 isAdmin 是一个助手,目前只返回 true 或 false。如果我渲染 {{isAdmin}} 它会正确显示值(true、false),但如果我尝试使用 {{#if}} 对其进行评估,则不会发生任何情况。我的代码:
Nodejs 自定义助手:
var hbs = handlebars.create({
partialsDir: [
'view/partials/'
],
helpers:{
isAdmin: function(){
return true;
}
}
});
HTML - Handlebars
{{#forEach eventData}}
<tr>
<td>{{@index}}</td>
<td>{{general_name}}</td>
<td>{{general_description}}</td>
<td>
<a href="/view/{{_id}}">View</a>
{{#if isAdmin}}
<a href="/versions/{{_id}}">Details & Changes</a>
{{/if}}
</td>
</tr>
{{/forEach}}
“详细信息和更改”链接永远不会显示。有什么想法吗?
最佳答案
我发现我可以使用以下语法访问 forEach 之外的变量:
{{../foo}} or {{#myhelper ../myfoo}}
helper
h.registerHelper('isAdmin', function(username, options) {
var admins = 'admin';
if(admins.includes (username)) {
return options.fn(this);
}else{
return options.inverse(this);
}
});
h.registerHelper('isCreator', function(logged_in, created_by, options) {
if(logged_in == created_by) {
return options.fn(this);
}else{
return options.inverse(this);
}
});
Handlebars
{{#forEach eventData}}
<tr>
<td>{{@index}}</td>
<td>{{general_name}}</td>
<td>{{general_description}}</td>
<td>{{submited_by}}</td>
<td>{{general_setup_by}} | {{general_register_by}}</td>
<td>{{general_time_start}} | {{general_time_end}}</td>
<td>{{layout_room}}</td>
{{#isAdmin ../username}}
<td><a href="/versions/{{id}}">Details & Changes</a></td>
{{else}}
{{#isCreator ../username updated_by}}
<td><a href="/event/{{id}}">Edit</a></td>
{{else}}
<td><a href="/view/{{id}}">View</a></td>
{{/isCreator}}
{{/isAdmin}}
</tr>
{{/forEach}}
关于if-statement - Handlebars #if不在#forEach内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953757/