Kendo Grid通过dataRow获取dataItem始终为null的问题排查
以下是针对你遇到的问题,结合代码场景的可能原因及排查方向:
Grid数据未完成绑定:你的代码位于Ajax调用内,Ajax请求完成后DOM可能已更新,但Grid的数据源还未完成重新绑定。此时DOM中的tr节点存在,但Grid内部数据模型未同步,调用
dataItem()自然返回null。可以通过监听Grid的dataBound事件,在事件回调中执行这段代码;或者手动调用dataGrid.refresh()确保数据绑定完成后再获取dataItem。DOM元素归属错误:虽然通过
[data-uid]找到了tr节点,但要确认该节点确实属于当前dataGrid的tbody。如果页面存在多个Grid或嵌套Grid,可能误获取了其他Grid的行节点。可以打印dataRow.parentNode,检查是否与dataGrid.tbody[0]一致。UID与数据源记录不匹配:DOM中tr的
data-uid是Grid初次渲染时生成的,但如果Ajax请求更新了数据源,新记录的UID可能与你手动填写的旧UID不匹配。即使DOM中仍存在该UID的tr,Grid内部数据源已无对应记录,dataItem()会返回null。可以打印dataGrid.dataSource.data(),检查其中是否存在UID为b318f970-79ec-472e-818f-f0d5adb6b5f3的记录。DOM元素传递方式问题:你使用
[0]将jQuery对象转为原生DOM元素,虽然Kendo的dataItem()支持传入原生DOM元素,但如果该元素并非Grid直接管理的行节点(比如是模板嵌套的其他tr),会导致返回null。可以尝试直接传入jQuery对象:var dataItem = dataGrid.dataItem(dataGrid.tbody.find("tr[data-uid='" + uidValue + "']")),去掉[0]后再测试。Grid实例引用错误:确认
row.find(".k-grid").data("kendoGrid")获取的是目标Grid实例。如果row的上下文不正确,可能找到的是其他Grid。可以打印dataGrid,检查其配置(如id)是否符合预期。
内容的提问来源于stack exchange,提问作者gameloverr

