无法在#if语句句柄中使用逻辑运算符?

时间:2018-11-24 21:31:51

标签: handlebars.js

我有以下代码:

{{#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}},它仍然给出了解析器错误。

所以我想也许您必须使用一个助手来完成这种事情,但是我也无法获得我注册的任何助手来工作。

1 个答案:

答案 0 :(得分:0)

结果证明,#if助手只能测试属性是真还是假-不能测试任意表达式[source],因此您必须使用助手进行所有操作。只需编写一个函数即可将其与逻辑运算符进行比较并返回truefalse

为避免麻烦,调用帮助程序的语法也不使用括号。...参数之间用空格分隔,就像在rails中一样。看起来像这样:

{{myHelperFunction myarg1 myarg2}}

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

{{myOuterHelper (myInnerHelper myarg1 myarg2)}}

最后一个提示,如果您想将辅助对象与#if嵌套在一起,则也需要括号:

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