if-statement - Handlebars #if不在#forEach内工作

标签 if-statement foreach handlebars.js helper

我需要渲染一个表格,其中包含在用户具有管理员权限时将显示的链接。我有一个#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/

相关文章:

php - 检查数组关键参数并使用适当数量的参数调用方法

javascript - 列出来自Youtube channel 的最新视频,代码可以运行,但是Youtube Data API的每日配额过快填满了吗?

css - Handlebars+BootStrap卡边框

model - Ember Data - 在模板中呈现一对多

c++ - 需要帮助将函数从 C++ 移植到 Ocaml

python - 在这种情况下,if 代码块如何从 while 循环中断的位置继续执行?

javascript - jQuery if 语句取决于 px 中的宽度

javascript - NodeJS,多个 if 可能返回 header (并且失败)

c# - 在 C# 中对 n 个列表的所有列表项选项进行操作

javascript - 使用 Express Node 将 API 数据渲染到 html/handlebars