不能在 handlebars #if 语句中使用逻辑运算符?

Can't use logical operators in handlebars #if statement?

我有以下代码:

{{#if true}} An {{else}} A {{/if}

这就是整个模板。加载正常。但请注意 #if 条件只是 true。如果我在那里放置文字以外的任何东西,它就不起作用。我输入的任何变量,任何类型的程序表达式,如 {{#if 3 > 5}},它都会给我一个解析器错误:

Error: Parse error on line 36:
{{#if 3 > 5 }} An {{else}} A
---------------------^
Expecting 'CLOSE_RAW_BLOCK', 'CLOSE', 'CLOSE_UNESCAPED', 'OPEN_SEXPR', 'CLOSE_SEXPR', 'ID', 'OPEN_BLOCK_PARAMS', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'

我想不通。我什至将它减少到 {{#if 3 > 5}} A {{/if}},但它仍然给出解析器错误。

所以我想也许你必须为这种事情使用助手,但我也找不到任何我注册的助手。

原来 #if 助手只能测试属性是真还是假 – 不能任意表达式[source],所以你必须用助手做所有事情。只需编写一个函数来比较逻辑运算符和 return truefalse.

为了省去一些麻烦,调用助手的语法也不使用括号....参数是 space 分隔的,就像在 rails 中一样。所以它看起来像:

{{myHelperFunction myarg1 myarg2}}

如果你想嵌套助手,你需要括号:

{{myOuterHelper (myInnerHelper myarg1 myarg2)}}

我的最后一个提示,如果你想用 #if 嵌套你的助手,你也需要括号:

{{#if (myHelper myarg1 myarg2)}} content {{/if}}