【问题标题】:Handlebars.js Conditional Statement {{#if expression}} ... {{else}} ... {{/iif}} ErrorHandlebars.js 条件语句 {{#if expression}} ... {{else}} ... {{/iif}} 错误
【发布时间】:2015-06-28 05:14:55
【问题描述】:

我正在尝试实现 Handlebars 模板逻辑,以在用户通过身份验证时显示“已登录”导航栏(带有用户的名字和个人资料图片),如果用户未通过身份验证,则显示“已注销”导航栏。

为此,我使用 handlebars.js 条件语句:

{{#if login_status}}
     *logged in navbar html code*
{{else}}
     *logged out navbar html code*
{{/if}}

我还使用了一个帮助器 login_status.js,如果已通过身份验证,则返回 true,而 false 未通过身份验证,基于是否存在用户的 ID。我的帮助代码如下所示:

module.exports = function(l) {
    if (l.data.root.id === undefined) {
        console.log('user is logged out');
        return false;
    } else {
        console.log('user is logged in: ', l.data.root.id);
        return true;
    }
};

但是,这不起作用,它总是返回 {{else}} 语句,这意味着用户没有经过身份验证。

有没有更好的方法来实现这个逻辑?辅助代码不正确吗?车把 {{#if}} 表达式是否不正确?

感谢任何帮助。

谢谢!

杰西

【问题讨论】:

  • 您好,为什么不能使用“login_status”作为应用程序控制器的属性而不是编写帮助程序?能否请您详细说明这里使用助手的原因。
  • @phkavitha 您能否详细说明我如何将“login_status”用作应用程序控制器的属性?我希望每页只有一个视图,而不是“登录”视图和“注销”视图,因为主要区别通常只是导航栏。感谢您的帮助!

标签: javascript jquery node.js handlebars.js


【解决方案1】:

phkavitha 想说的是,您可以将 (login_status function) 用作属性(getter)而不是帮助器。

你可以说:

var template = Handlebars.compile([your handlebars template]);
var html = template({
     ...
     get login_status() {
        return require('login_status.js')(l);
     }, 
     ...
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多