Kendo 网格 table 展开删除 table 数据

Kendo grid table expand removes table data

我们有一个函数用于扩展 kendo 网格中的所有行(如果它们有子网格)。目前,这是通过箭头指示的。这个箭头在代码中用于搜索,所以它知道如何展开网格。

(function () {
$(".k-grid-header .k-hierarchy-cell").html(
    "<div>" +
        "<span class=\"k-icon k-i-arrow-60-right grid-expand pointer link\" title=\"Expand all\"></span>" +
    "</div>");
$(".grid-expand").click(expandGridDetails);
});

function expandGridDetails() {
    var grid = $(".k-grid").data("kendoGrid");
    grid.expandRow(grid.tbody.find(".k-master-row").has(".k-hierarchy-cell a.k-icon"));
}

对于其中一个网格,此功能完美运行,但对于第二个网格,此函数不会扩展行,而是删除 detailRow 中表示的一些数据。

这个问题好像是在grid.expand()方法一执行就出现了。如果我执行任何其他操作,例如 grid.tbody.find 语句,table 将保持不变。使用 grid.collapseRow() 会导致同样的事情发生,不是执行而是删除一些数据。主行在整个过程中保持完整。

有没有人知道这个错误的可能原因是什么?

一位高级程序员向我解释了我做错了什么,我用他的解决方案修复了它。使用 $(".grid-expand") 代码每次都会调用第一个网格,即使在另一个网格中选择了一行之后也是如此。解决方案是保存一个全局变量,该变量跟踪当前正在查看的网格。 Backdraw 就是这个全局变量在同一个页面被同一个用户多次打开时会出问题,但是我觉得没有理由优先解决这个小问题。

另一个解决方案是使用

function expendGridDetails(e) {
   var grid = e.sender;
}

缺点是 e 变量不会自动发送到每个函数。我还不确定是什么决定了他们是否收到或不收到此变量,但它比使用可能未设置为正确值的全局变量更节省。 e.sender 向调用函数的网格询问其名称。或者至少这是我从给我的解释中所理解的广义内容。