【问题标题】:Basic 'if' statements do not work in handlebars JS基本的“if”语句在车把 JS 中不起作用
【发布时间】:2019-01-26 18:19:02
【问题描述】:

我正在使用express-handlebars 并拥有以下最小模板:

<!DOCTYPE html>
<html>

    <body>

        {{#if page === 'help'}}YAAAY{{/if}}

    </body>
</html>

这无法解析:

Error: C:\Users\mike\myapp\views\error.hbs: Parse error on line 6:
...ody>     {{#if page === 'help'}}YAAAY{{/i
---------------------^

我知道车把并不期待 ===,但这不是 if 的重点吗?

如何在把手中使用if 语句?

【问题讨论】:

  • 改用==
  • Handlerbars 仅用于检查值是真还是假,而不是像在 javascript 中那样,您需要创建自己的帮助器。
  • 哇:stackoverflow.com/a/16315366/1225328。老实说,我很想知道他们做出这种“无布尔运算符”选择背后的原因。
  • @sp00m 想通过此链接发布另一个答案或编辑我的答案?认为这在这种情况下非常有帮助;-)
  • @sp00m 有一个if,它已经不是无逻辑的了。关键是要尽量减少视图中的计算量,因为在模板之外测试该逻辑几乎总是更容易(并且该逻辑有增加的趋势,使其变得更加困难)。

标签: javascript node.js conditional handlebars.js express-handlebars


【解决方案1】:

车把的if-helperonly accepts a boolean as an argument。你有两个选择:

使用现有的处理程序

page === 'help' 的结果作为模板中的变量传递并执行以下操作:

{{#if isPageHelp}}
  <h1> Help! </h1>
{{/if}}

制作你自己的处理器

您可以使用自己的处理程序implement the === operator。谢谢@sp00m

【讨论】:

  • 这似乎需要大量的工作:isPageHelpisPageAboutisPageBlog,共 n 页。有没有更好的办法?
  • 编写另一个更适合您需求的助手? :) 不过我同意你的看法 - 它不是最令人愉快的 API。
  • 这是我更喜欢 Nunjucks 而非 Handlebars 的原因之一。
【解决方案2】:

试试这个助手

 const Handlebars = require('handlebars');
    Handlebars.registerHelper('ifCond', function (v1,v2,options) {
    if (v1 == v2)
        return options.fn(this);
    else
        return options.inverse(this);
    });

Handlebars.registerHelper('exCond', function (v1,v2,options) {
    if (v1 != v2)
        return options.fn(this);
    else
        return options.inverse(this);
});

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 2017-01-12
    • 2018-08-03
    • 2017-05-06
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多