Superset中HandleBar数组列迭代问题:动态表格生成失败
Handlebars无法遍历数组列生成动态表头,直接显示带方括号的数组内容
问题描述
我需要基于数据集里的数组类型列D、E创建动态表格,两者数组元素数量一致。但编写的Handlebars代码无法生成动态表头,直接引用D、E时只会显示带方括号的数组格式内容(比如[10,20,30])。
我的Handlebars代码如下:
{{#each data}} <table> <tr> <th>REG</th> <th>TYPE</th> <th>STO</th> {{#each D}} <th>{{this}}% </th> {{/each}} </tr> <tr> <td>{{A}}</td> <td>{{B}}</td> <td>{{C}}</td> {{#each E}} <td>{{this}}</td> {{/each}} </tr> </table> {{/each}}
补充背景:数据集里列D、E标记为数组类型,SQL Lab中查看实际数据时也是数组形式,但Handlebars无法正确遍历它们。
核心问题分析
出现这个问题的大概率原因是:D和E在传递给Handlebars的上下文里并不是真正的JavaScript数组,而是字符串格式的数组(比如"[10,20,30]")。Handlebars的{{#each}}只能遍历可迭代的对象(比如数组),对字符串只会按字符遍历,直接输出时就会显示带方括号的原始字符串。
解决步骤
方案一:数据预处理阶段解析数组
在把数据传给Handlebars渲染之前,遍历每条数据,将字符串格式的数组解析为真正的JS数组:
// 假设原始数据为rawData数组 const processedData = rawData.map(item => ({ ...item, D: JSON.parse(item.D), E: JSON.parse(item.E) })); // 将processedData传入Handlebars进行渲染
方案二:使用Handlebars自定义助手解析数组
如果无法在预处理阶段修改数据,可以自定义助手来解析字符串数组:
// 注册自定义助手 Handlebars.registerHelper('parseArray', function(str) { return JSON.parse(str); });
修改模板代码,使用该助手遍历数组:
{{#each data}} <table> <tr> <th>REG</th> <th>TYPE</th> <th>STO</th> {{#each (parseArray D)}} <th>{{this}}% </th> {{/each}} </tr> <tr> <td>{{A}}</td> <td>{{B}}</td> <td>{{C}}</td> {{#each (parseArray E)}} <td>{{this}}</td> {{/each}} </tr> </table> {{/each}}
额外注意事项
- 确保待解析的字符串是标准JSON格式,比如字符串类型的数组元素需带双引号,避免
JSON.parse()报错。 - 如果确认数据是数组但仍无法遍历,检查Handlebars版本兼容性,或排查是否有其他上下文覆盖了D、E的值。
内容的提问来源于stack exchange,提问作者barney_st_er
相关产品推荐
相关产品推荐

