
本文介绍在 wijmo flexgrid 中通过 javascript 动态设置行高或单元格高度的可靠方案,特别适用于 id 动态生成、无法预设 css 选择器的场景,涵盖 vue 绑定、css 类注入及 dom 操作的最佳实践。
本文介绍在 wijmo flexgrid 中通过 javascript 动态设置行高或单元格高度的可靠方案,特别适用于 id 动态生成、无法预设 css 选择器的场景,涵盖 vue 绑定、css 类注入及 dom 操作的最佳实践。
Wijmo FlexGrid 并不直接暴露 rowHeight 属性供全局统一设置(如 grid.rowHeight = 48),但提供了灵活且稳定的钩子机制来实现按行定制高度——核心在于 loadedRows 事件(Vue 中为 :loaded-rows)与 row.cssClass 的组合使用。该方式绕过动态 ID 限制,无需硬编码 CSS 选择器,也避免了直接操作 .wj-cell 等内部类导致的样式覆盖失败问题。
✅ 推荐方案:利用 loadedRows + 动态 CSS 类(Vue 示例)
在 Vue 组件中,绑定 loadedRows 回调函数,在每行加载后为其分配自定义 CSS 类:
<template><wj-flex-grid :items-source="data" :loaded-rows="onLoadedRows" :auto-generate-columns="false"><!-- 列定义 --></wj-flex-grid></template><script>
export default {
methods: {
onLoadedRows(grid) {
grid.rows.forEach(row => {
// 方案1:根据数据项字段设置固定高度类
if (row.dataItem && row.dataItem.rowHeight === 'large') {
row.cssClass = 'wj-row-large';
} else if (row.dataItem?.rowHeight === 'compact') {
row.cssClass = 'wj-row-compact';
} else {
row.cssClass = ''; // 清除自定义类
}
// 方案2(进阶):直接内联设置行高(兼容性更强)
// row.height = 56; // 注意:仅对部分版本有效,推荐优先用 cssClass
});
}
}
}
</script>
配套 CSS(放入
/* 支持动态 ID 场景 —— 无需指定 grid ID */
.wj-row-large .wj-cell {
padding: 16px 8px !important;
line-height: 1.5;
}
.wj-row-compact .wj-cell {
padding: 4px 8px !important;
line-height: 1.2;
}
⚠️ 注意事项:
- row.cssClass 会自动添加到对应
元素上,完全独立于 grid 容器 ID,天然适配动态 ID 场景;- 使用 !important 是因 Wijmo 内部样式优先级较高,确保自定义 padding 生效;
- 避免使用 row.height = N(非标准 API,部分版本不支持),cssClass 是官方推荐且稳定的方式;
- 若需整表统一高度(非逐行),可在 initialized 后通过 grid.hostElement 注入样式:
grid.hostElement.classList.add('custom-grid-height');并配合 CSS:.custom-grid-height .wj-row > .wj-cell { padding: 12px; }
❌ 不推荐方案说明
直接 jQuery 修改 .wj-cell 样式(如 $('#form-1__name').find(...).css()):
Wijmo 使用虚拟滚动和 DOM 复用机制,手动修改的样式会在滚动/刷新时被重置,且 .wj-cells > .wj-row > .wj-cell 选择器易受版本更新影响,维护性差。尝试在 CSS 文件中写动态 ID 选择器(如 #form-\31 __name .wj-cell):
CSS 不支持运行时变量,无法实现“动态 ID → 静态 CSS”的映射,此路不通。综上,loadedRows + cssClass 是兼顾灵活性、稳定性与可维护性的最佳实践,既规避了 ID 动态性难题,又符合 Wijmo 的设计范式。实际项目中建议结合业务逻辑,在 dataItem 中预置高度标识(如 rowHeight: 'large'),实现声明式高度控制。











