在 kendo ui grid 中,直接使用 `dataitem()` 方法传入 dom 元素(如 `tr[data-uid]`)可能返回 `null`,根本原因在于该方法要求传入的必须是 grid 内部渲染的真实行元素(且需确保 dom 已就绪、数据已绑定),而异步操作中常因时机不当或选择器偏差导致失败;推荐改用 `datasource.getbyuid()` 方法,它不依赖 dom 状态,更可靠、更高效。
Kendo UI 的 grid.dataItem(rowElement) 方法设计初衷是接收由 Grid 渲染生成的
虽存在于 DOM,但尚未被 Grid 完全初始化(例如在 dataBound 事件前调用); 因此,最佳实践是绕过 DOM 层级,直接操作数据源(DataSource)。Kendo DataSource 提供了专用于 UID 查找的稳定 API:getByUid(uid)。每个数据项在绑定时会被自动赋予唯一 uid 属性(如 "b318f970-79ec-472e-818f-f0d5adb6b5f3"),该 UID 同时写入
✅ 正确用法示例:
// 假设 Grid 初始化时 ID 为 "myGrid"
var grid = $("#myGrid").data("kendoGrid");
if (!grid) {
console.warn("Grid instance not found");
return;
}
var uidValue = "b318f970-79ec-472e-818f-f0d5adb6b5f3";
var dataItem = grid.dataSource.getByUid(uidValue);
if (dataItem) {
console.log("Found data item:", dataItem);
// 可安全访问字段,如 dataItem.name, dataItem.id 等
} else {
console.warn("No data item found for UID:", uidValue);
}? 注意事项:
总之,在异步上下文(如 AJAX success 回调)中操作 Grid 数据,应始终以 dataSource 为单一可信源,避免 DOM 与数据状态错位引发的 null 陷阱。