使用Handlebars访问auditItems中可变索引位置的rule_id元素问题咨询
解决Handlebars中访问可变索引位置的rule_id问题
嘿,这个问题我之前也碰到过!Handlebars的模板语法在处理动态索引/键的时候确实有点绕,不过有两种常用的解决办法,取决于你的auditItems到底是数组还是键为1-20的对象:
1. 如果auditItems是数组(索引0-based)
Handlebars内置了一个lookup助手,专门用来根据动态索引获取数组元素。不过要注意:数组的索引是从0开始的,而你的目标索引是1-20,所以需要先把索引值减1(如果后台没做处理的话)。
假设你有一个变量targetIndex存储着1-20的目标位置,写法如下:
{{#each audits}} {{! 先通过lookup拿到对应位置的元素,再取rule_id }} {{(lookup this.order.auditItems (sub targetIndex 1)).rule_id}} {{/each}}
注:
sub是一个减法自定义助手,如果你的项目里没有自带,可以自己简单实现一个:Handlebars.registerHelper('sub', function(a, b) { return a - b; });
如果不想写自定义助手,也可以在传入模板前,把目标索引提前转换成0-based的数值,这样直接用lookup就行。
2. 如果auditItems是对象(键为1-20的数字/字符串)
这种情况更简单,Handlebars支持直接用[动态变量名]的语法访问对象的动态键:
{{#each audits}} {{! yourDynamicIndexVariable就是存储1-20的变量 }} {{this.order.auditItems.[yourDynamicIndexVariable].rule_id}} {{/each}}
如果每个audit项本身就带有对应的目标索引(比如每个audit里有个itemId字段存着1-20的值),那可以直接用当前上下文的属性:
{{#each audits as |audit|}} {{audit.order.auditItems.[audit.itemId].rule_id}} {{/each}}
小提示
如果不确定auditItems的结构,可以先在模板里用{{log this.order.auditItems}}打印出来,看看是数组还是键值对对象,再选对应的写法~
内容的提问来源于stack exchange,提问作者imatiasmb
相关产品推荐
相关产品推荐

