通八洲科技

Kendo UI Grid 中通过 UID 获取数据项的正确方法

日期:2025-12-26 00:00 / 作者:碧海醫心

在 kendo ui grid 中,直接使用 `dataitem()` 方法传入 dom 元素(如 `tr[data-uid]`)可能返回 `null`,根本原因在于该方法要求传入的必须是 grid 内部渲染的真实行元素(且需确保 dom 已就绪、数据已绑定),而异步操作中常因时机不当或选择器偏差导致失败;推荐改用 `datasource.getbyuid()` 方法,它不依赖 dom 状态,更可靠、更高效。

Kendo UI 的 grid.dataItem(rowElement) 方法设计初衷是接收由 Grid 渲染生成的

DOM 元素(即 dataGrid.tbody.find("tr").first()[0] 这类真实存在的、已被 Grid 管理的行节点),并据此反查其绑定的数据项。但实践中,以下情况极易导致返回 null:

因此,最佳实践是绕过 DOM 层级,直接操作数据源(DataSource)。Kendo DataSource 提供了专用于 UID 查找的稳定 API:getByUid(uid)。每个数据项在绑定时会被自动赋予唯一 uid 属性(如 "b318f970-79ec-472e-818f-f0d5adb6b5f3"),该 UID 同时写入

属性,但查询时应优先信任数据源而非 DOM。

✅ 正确用法示例:

// 假设 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 陷阱。