Handlebars自定义if_eq助手调用JSON数据返回空段落问题
问题解决:Handlebars自定义
if_eq助手块内无法访问JSON数据 问题原因
你的自定义if_eq助手在调用options.fn(this)和options.inverse(this)时,this指向的是助手注册时的上下文(而非模板渲染用的JSON payload),导致块内的rawSource等变量无法匹配到对应数据,最终输出空段落。而Handlebars自带的条件助手会自动处理上下文传递逻辑,因此能正常加载payload数据。
修复方案
修改if_eq助手的实现,将正确的数据上下文传递给options.fn和options.inverse,推荐使用options.data.root获取全局payload数据:
handlebars.registerHelper('if_eq', (p, q, options) => { // 传递全局数据上下文,确保块内变量能正确读取payload内容 return p == q ? options.fn(options.data.root) : options.inverse(options.data.root) })
如果是嵌套模板场景,也可以用options.contexts[0]获取当前层级的上下文:
handlebars.registerHelper('if_eq', (p, q, options) => { return p == q ? options.fn(options.contexts[0]) : options.inverse(options.contexts[0]) })
验证说明
修改后,当rawSource.isBackup等于"YES"时,块内的{{ rawSource.L_backupLocation }}和{{ rawSource.backupLocation }}就能正确读取JSON payload中的数据,不会再输出空段落。
内容的提问来源于stack exchange,提问作者Jacki
相关产品推荐
相关产品推荐

