You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:47:16