关于 fix-table-row-mode
用于将 `sap.ui.table.Table` 弃用行属性迁移到 `rowMode` 聚合的开发技能,面向维护 UI5 应用的开发者。它覆盖 XML 与 JavaScript 写法,并要求迁移前检查模式兼容性。
主要功能
- 01映射弃用行属性
- 02选择对应 RowMode 类
- 03处理 XML 与 JavaScript
- 04迁移前检查属性兼容性
- 05指导重新运行 Linter 验证
适用场景
- 01修复表格行属性弃用错误
- 02迁移 XML 视图中的表格
- 03更新 JavaScript 表格实例
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ui5/ plugins-coding-agents --skill fix-table-row-mode安装后在 Claude Code 中输入/fix-table-row-mode确认已加载。
详细介绍
修复表格行模式(no-deprecated-api)
此技能用于修复 sap.ui.table.Table 上与行相关且已弃用的属性。这些属性会被 UI5 linter 检测到,但无法自动修复。现代化改造会将扁平属性替换为结构化的 rowMode 聚合。
重要:不要将 sap.ui.table.Table 现代化为 sap.m.Table——两者并不等价。
Linter 规则
| 规则 ID | 消息模式 |
|---|---|
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'visibleRowCountMode' |
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'visibleRowCount' |
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'rowHeight' |
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'fixedRowCount' |
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'fixedBottomRowCount' |
no-deprecated-api | 使用了类 sap.ui.table.Table 的已弃用属性 'minAutoRowCount' |
属性映射
Table 上已弃用的属性 | RowMode 上的新属性 | 备注 |
|---|---|---|
visibleRowCountMode | (决定 RowMode 类) | "Fixed" → rowmodes:Fixed,"Interactive" → rowmodes:Interactive,"Auto" → rowmodes:Auto |
visibleRowCount | rowCount | 用于 Fixed 和 Interactive 模式 |
minAutoRowCount | minRowCount | 仅用于 Auto 模式 |
rowHeight | rowContentHeight | 名称变更 |
fixedRowCount | fixedTopRowCount | 名称变更(增加了 Top) |
fixedBottomRowCount | fixedBottomRowCount | 无变化 |
RowMode 类选择
根据旧的 visibleRowCountMode 值选择:
"Fixed"(或未设置——这是默认值)→rowmodes:Fixed"Interactive"→rowmodes:Interactive"Auto"→rowmodes:Auto
现代化改造前的安全检查
如果设置在 Table 上的某个属性不存在于所选的 RowMode 类中(例如,在 Fixed 模式的表格上设置了 minAutoRowCount),这表明可能存在动态行模式切换。中止该表格的现代化改造,并标记为需要人工审核。
修复策略——XML 视图
步骤 1:添加 XML 命名空间
添加到根 <mvc:View> 标签:
xmlns:rowmodes="sap.ui.table.rowmodes"
步骤 2:移除已弃用属性并添加 rowMode 聚合
之前(Fixed 模式):
<table:Table
rows="{/Products}"
visibleRowCountMode="Fixed"
visibleRowCount="5"
fixedRowCount="1"
fixedBottomRowCount="2"
rowHeight="30">
<table:columns>...</table:columns>
</table:Table>
之后:
<table:Table
rows="{/Products}">
<table:rowMode>
<rowmodes:Fixed
rowCount="5"
fixedTopRowCount="1"
fixedBottomRowCount="2"
rowContentHeight="30"/>
</table:rowMode>
<table:columns>...</table:columns>
</table:Table>
之前(Interactive 模式):
<table:Table
rows="{/Products}"
visibleRowCountMode="Interactive"
visibleRowCount="10"
rowHeight="25">
之后:
<table:Table
rows="{/Products}">
<table:rowMode>
<rowmodes:Interactive
rowCount="10"
rowContentHeight="25"/>
</table:rowMode>
之前(Auto 模式):
<table:Table
rows="{/Items}"
visibleRowCountMode="Auto"
minAutoRowCount="3">
之后:
<table:Table
rows="{/Items}">
<table:rowMode>
<rowmodes:Auto minRowCount="3"/>
</table:rowMode>
修复策略——JavaScript
步骤 1:添加 RowMode 导入
将相应的类添加到 sap.ui.define:
- Fixed 模式使用
"sap/ui/table/rowmodes/Fixed" - Interactive 模式使用
"sap/ui/table/rowmodes/Interactive" - Auto 模式使用
"sap/ui/table/rowmodes/Auto"
步骤 2:将属性替换为 rowMode
之前:
sap.ui.define([
"sap/ui/table/Table"
], function(Table) {
var oTable = new Table({
visibleRowCountMode: "Interactive",
visibleRowCount: 10,
rowHeight: 25
});
});
之后:
sap.ui.define([
"sap/ui/table/Table",
"sap/ui/table/rowmodes/Interactive"
], function(Table, InteractiveRowMode) {
var oTable = new Table({
rowMode: new InteractiveRowMode({
rowCount: 10,
rowContentHeight: 25
})
});
});
同时处理基于 setter 的写法:
之前:
oTable.setVisibleRowCountMode("Fixed");
oTable.setVisibleRowCount(8);
oTable.setFixedRowCount(2);
oTable.setRowHeight(40);
之后:
// Import: "sap/ui/table/rowmodes/Fixed"
oTable.setRowMode(new FixedRowMode({
rowCount: 8,
fixedTopRowCount: 2,
rowContentHeight: 40
}));
实施步骤
- 使用 --details 运行 linter,找出所有受影响的 Table 实例
- 针对每个 Table,根据
visibleRowCountMode确定 RowMode 类(默认值:"Fixed") - 安全检查:确认所有已弃用属性都与所选 RowMode 类兼容
- XML 视图:添加
xmlns:rowmodes="sap.ui.table.rowmodes"命名空间,移除已弃用属性,并添加<rowMode>聚合 - JavaScript:添加 RowMode 导入,使用映射后的属性创建 RowMode 实例,并通过构造函数或
setRowMode()设置 - 验证:重新运行 linter
RowMode 属性参考
| 模式 | 可用属性 |
|---|---|
Fixed | rowCount、fixedTopRowCount、fixedBottomRowCount、rowContentHeight |
Interactive | rowCount、rowContentHeight |
Auto | minRowCount、fixedTopRowCount、fixedBottomRowCount、rowContentHeight |
备注
- 如果未设置
visibleRowCountMode,默认值为"Fixed"——请使用rowmodes:Fixed <table:rowMode>聚合放在<table:Table>内,与<table:columns>并列- 在 XML 中,RowMode 元素始终使用
rowmodes:命名空间前缀 - 新旧 API 均为同步 API——无需进行异步处理
相关技能
- fix-deprecated-controls:对于
sap.ui.table.Table上其他no-deprecated-api错误(例如与行模式无关的弃用类或属性),请使用 fix-deprecated-controls - fix-js-globals:如果通过全局访问方式实例化 Table(例如
new sap.ui.table.Table()),fix-js-globals 会将其转换为正确的模块导入
评论
支持 Markdown