You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dojo dgrid 如何基于另一列字段值配置动态formatter格式化规则

问题原因

你现有代码的核心问题有3个:

  • 依赖dgrid-select点击事件获取 Kingdom 字段的逻辑完全不符合需求:表格渲染时还没有任何点击操作,且全局变量存储的 Kingdom 只会保留最后一次选中行的值,无法对应每行自身的属性
  • getDensity函数的参数使用错误,函数内KINGDOM、value都是未定义的变量,自然无法正常执行
  • 完全没有用到dgrid formatter原生提供的行数据参数,走了弯路

解决方案

dgrid的formatter函数默认支持传入2个参数:

  1. 第一个参数:当前列对应字段的取值(即你Density列的OB_DENSITY值)
  2. 第二个参数:当前行的完整数据对象,可以直接获取同一行其他字段的取值

你只需要重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:27:02