Dojo dgrid 如何基于另一列字段值配置动态formatter格式化规则
问题原因
你现有代码的核心问题有3个:
- 依赖
dgrid-select点击事件获取 Kingdom 字段的逻辑完全不符合需求:表格渲染时还没有任何点击操作,且全局变量存储的 Kingdom 只会保留最后一次选中行的值,无法对应每行自身的属性 getDensity函数的参数使用错误,函数内KINGDOM、value都是未定义的变量,自然无法正常执行- 完全没有用到dgrid formatter原生提供的行数据参数,走了弯路
解决方案
dgrid的formatter函数默认支持传入2个参数:
- 第一个参数:当前列对应字段的取值(即你Density列的
OB_DENSITY值) - 第二个参数:当前行的完整数据对象,可以直接获取同一行其他字段的取值
你只需要重写getDensity函数,删除无用的dgrid-select绑定代码即可,修改后的代码如下:
// 直接删除这部分完全不需要的代码 // var sKingdom = ""; // grid.on("dgrid-select", function (evt) { // let cell = grid.cell(evt); // sKingdom = cell.row.data.Kingdom; // }); // 直接复用你已经写好的两个密度转换函数即可,不需要额外定义dPlantDensities、dAnimalDensities function getDensity(value, rowData) { // 假设KINGDOM字段值为0代表植物,其他值代表动物,和你原有逻辑保持一致 if (rowData.KINGDOM === 0) { return numberToTextDensityPlants(value); } else { return numberToTextDensityAnimal(value); } }
提示:如果你的数据中Kingdom字段的实际键名不是全大写
KINGDOM,根据实际字段名调整rowData后的属性名即可。
修改后不需要调整其他代码,表格渲染时会自动逐行执行formatter,根据每行的KINGDOM值返回对应的密度说明文本。
内容的提问来源于stack exchange,提问作者Claire
相关产品推荐
相关产品推荐

