嵌套在每个声明中

时间:2016-06-11 17:03:32

标签: express handlebars.js

我有一个应用程序,允许组内的用户查看每个成员给该组的消息,并在我的视图中使用{{#each comment}}列出它们。我想将任何评论的编辑限制为仅使用{{#if user.user_id}}与登录用户关联的评论。

我试图在我的每个部分中嵌套一个if语句,但它没有隐藏那些与这种情况不匹配的编辑链接。这是因为没有其他声明吗?可能是嵌套的if来自不同的对象吗?

以下是我的观点:

{{#each comment}}
    <div class="col-md-7 col-md-offset-5 comment-card">
        <div class="comment-card-header">
            <p class="card-date">{{this.commentDateSlug}}</p>
            <h3 class="card-title">{{this.title}}</h3>
        </div>
        <div class="comment-card-body">
            <p class="card-report-link">Report: <a href="{{this.commentLink}}" class="card-data-report-url">{{comment.reportLink}}</a></p>
        </div>

        {{#if user.user_id}}
        <p>This is the user: {{user.user_id}}</p>
        <div class="annotation-card-footer">
            <a href="/app/edit/{{this.commentId}}">Edit</a>
        </div>
        {{/if}}
    </div>
{{/each}}

以下是路线:

appRoutes.route('/') 

    .get(function(req, res){

        models.Comment.findAll({
            attributes: ['commentId', 'commentDate', 'dataDateStart', 'dataDateEnd', 'title', 'discovery', 'reportLink'],
            order: 'commentDate DESC',
            include: [{
                model: models.User,
                where: { organizationId: req.user.organizationId },
                attributes: ['organizationId', 'user_id']
            }]
        }).then(function(comment){
            res.render('pages/app/high-level-activity-feed.hbs',{
                comment: comment,
                user: req.user
            });
        })
    })

1 个答案:

答案 0 :(得分:1)

听起来您要在模板中执行的操作就是仅针对div.annotation-card-footer等于当前用户的user_id的评论呈现user_id

在伪代码中,这看起来如下所示:

if current_user.user_id equals comment.user_id:
    render div

Handlebars不支持比较运算符,因此我们需要编写自己的block helper。有关如何执行此操作的现有资源,请参阅this link,但我将提供一个示例:

Handlebars.registerHelper('ifeq', function (value1, value2, options) {
    return ((value1 === value2) ? options.fn(this) : options.inverse(this));
});

现在我们已经注册了我们的帮助器,我们可以在我们的模板中使用它:

{{#ifeq this.user_id ../user.user_id}}
    <p>This is the user: {{../user.user_id}}</p>
    <div class="annotation-card-footer">
        <a href="/app/edit/{{this.commentId}}">Edit</a>
    </div>
{{/ifeq}}

使用块助手的一个优点是我们可以轻松地在其他分支上使用:

{{#ifeq this.user_id ../user.user_id}}
    <p>This is the user: {{../user.user_id}}</p>
    <div class="annotation-card-footer">
        <a href="/app/edit/{{this.commentId}}">Edit</a>
    </div>
{{else}}
    {{! Non-current-user stuff goes here. }}
{{/ifeq}}