SurveyJS:如何基于动态矩阵布尔列控制另一矩阵行显示?
解决动态矩阵仅显示布尔列True行的问题
核心问题分析
你遇到的问题根源是:直接用visibleIf绑定布尔列时,默认会取整个列的首个值,而非当前行的独立布尔值。导致新增行后,判断逻辑混乱,显示错误数据。
具体解决方案
1. 给矩阵和列设置明确标识
给第一个动态矩阵设置唯一名称(比如sourceMatrix),布尔列的字段名设为isShow(自定义名称,只要好识别即可)。
2. 用行索引绑定每行的布尔判断
第二个矩阵的每行的visibleIf条件,要通过行索引定位到第一个矩阵对应行的布尔值。
- 假设表单工具里的行索引变量是
rowIndex(不同工具可能叫index,多数低代码/表单工具都有类似内置变量),那么条件写成:
这个逻辑的意思是:第二个矩阵的第N行,仅当第一个矩阵的第N行的{sourceMatrix[rowIndex].isShow} === trueisShow为true时才显示。
3. 同步两个矩阵的行数
第一个矩阵添加/删除行时,第二个矩阵必须同步行数,否则会出现行不匹配的情况。可以通过监听第一个矩阵的行变更事件,动态给第二个矩阵执行相同的添加/删除行操作:
- 比如在表单的脚本事件里,监听
sourceMatrix的rowAdded和rowRemoved事件,触发时给第二个矩阵(比如targetMatrix)同步增减行。
4. 绑定对应行的文本数据
第二个矩阵的每个文本列,要绑定到第一个矩阵对应行的同名字段。比如第二个矩阵的textCol1列,值设置为:
{sourceMatrix[rowIndex].textCol1}
这样就能确保显示的是第一个矩阵对应行的文本内容,不会出现数据串行的问题。
避坑提醒
- 不要直接写
{sourceMatrix.isShow},这种写法会默认取第一个矩阵布尔列的第一行值,导致所有行都用这个值判断,就是你遇到的“显示第一行数据”的问题。 - 部分表单工具里,行索引从0开始,要注意索引的对应关系,避免出现行错位。
内容的提问来源于stack exchange,提问作者Jenny_cgn21
相关产品推荐
相关产品推荐

