如何在handlebars.js中通过itemIndex判断JSON对象列表指定元素是否存在guestprofile属性
正确实现方案
方案1:嵌套使用lookup助手(原生支持,无需额外配置)
Handlebars 内置的lookup助手每次只能查询一层属性,你需要嵌套两层lookup分别取数组元素、再取元素的guestprofile属性,写法如下:
{{#if (lookup (lookup guests itemIndex) 'guestprofile')}} // 对应存在guestprofile属性时执行的逻辑 {{/if}}
方案2:结合with助手先定位到对应下标的元素(代码可读性更高)
如果后续还要用到该下标的其他属性,更推荐用with先把目标元素提取为上下文,再做属性判断:
{{#with (lookup guests itemIndex)}} {{#if guestprofile}} // 对应存在guestprofile属性时执行的逻辑 {{/if}} {{/with}}
可选:自定义简化助手(频繁使用嵌套属性查询时推荐)
你可以在JS代码里注册一个通用的嵌套属性查询助手,后续调用更简洁:
// 注册自定义助手 Handlebars.registerHelper('getNestedProp', function (target, ...keys) { return keys.reduce((res, key) => res?.[key], target) })
模板中直接传入多层属性名/索引即可:
{{#if (getNestedProp guests itemIndex 'guestprofile')}} // 对应逻辑 {{/if}}
之前写法失效的原因
guests.itemIndex.guestprofile:Handlebars会把itemIndex当做固定的字符串键名,而不是解析为变量,所以查询不到对应的数组元素(lookup guests itemIndex).guestprofile:Handlebars不支持在子表达式后直接用点语法链式取属性,所以无法读取到guestprofileguests[itemIndex].guestprofile:原生Handlebars不支持方括号索引语法,该写法完全无法被解析
内容的提问来源于stack exchange,提问作者ivan i
相关产品推荐
相关产品推荐

