如何在Handlebars中编写正确的if语句?页面加载报错求助
问题描述
我用Handlebars开发页面,要给每种可获取的勋章编写if判断逻辑,通过数据库传入用户的medalProgress值。但不管试哪种写法,页面都报错无法加载——按预期应该只是不渲染对应部分,而不是直接崩掉。medalProgress默认值是0,目前只希望页面能正常加载,后续再修改模型默认值测试其他判断。
出现问题的代码块:
{{#if user.medalProgress == 0}} <p>askljfdsjklf</p> {{/if}}
我已经尝试过的写法:
{{#if medalProgress = 0}} {{#if medalProgress == 0}} {{#if medalProgress === 0}} {{#if user.medalProgress = 0}} {{#if user.medalProgress == 0}} {{#if user.medalProgress === 0}}
解决方案
Handlebars的{{#if}}块表达式不支持直接在条件里写比较运算符(比如==、===、=),这就是导致页面报错无法加载的原因。要实现值比较的判断,得用Handlebars内置的eq辅助函数,或者自定义辅助函数。
1. 使用内置eq辅助函数
这是最简单的方式,直接用内置的相等判断辅助函数,写法如下:
{{#if (eq user.medalProgress 0)}} <p>askljfdsjklf</p> {{/if}}
如果你的Handlebars版本较低(v4.0之前),不支持括号调用辅助函数,就按顺序传递参数:
{{#eq user.medalProgress 0}} <p>askljfdsjklf</p> {{/eq}}
2. 自定义辅助函数(可选)
如果需要更复杂的判断逻辑,可以自己注册一个比较辅助函数,在JS中添加:
Handlebars.registerHelper('ifEquals', function(a, b, options) { return a === b ? options.fn(this) : options.inverse(this); });
然后在模板里这样用:
{{#ifEquals user.medalProgress 0}} <p>askljfdsjklf</p> {{else}} <!-- 其他情况的内容 --> {{/ifEquals}}
这样修改后,页面就能正常加载,当medalProgress为0时渲染对应内容,否则跳过该部分。
内容的提问来源于stack exchange,提问作者Hello
相关产品推荐
相关产品推荐

