Kendo ui 剑道UI网格编辑器完成

Kendo ui 剑道UI网格编辑器完成,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我有一个剑道网格,我在其中定义了一个编辑器,如下所示: @(Html.Kendo().Grid(Model.Data) .Name("GridINT") .Editable(editable => editable .Mode(GridEditMode.PopUp) .TemplateName("MyTemplateName") .Window(w => w.Wid

我有一个剑道网格,我在其中定义了一个编辑器,如下所示:

        @(Html.Kendo().Grid(Model.Data)
        .Name("GridINT")
        .Editable(editable => editable
            .Mode(GridEditMode.PopUp)
            .TemplateName("MyTemplateName")
            .Window(w => w.Width(500))
            .Window(w => w.Title("My Template")))
    $('.k-grid-cancel').bind('click', function ( e ) {
    colorCommandCells();
});
在使用编辑器之前,我将mouseup处理程序绑定到行,并调整命令按钮的样式。当编辑器关闭时,无论是通过“提交”、“取消”还是“X”,受影响行的“我的处理程序”和“样式”调整都将消失。我需要还原它们,但尚未找到有效的事件。我已按如下方式绑定取消单击事件:

        @(Html.Kendo().Grid(Model.Data)
        .Name("GridINT")
        .Editable(editable => editable
            .Mode(GridEditMode.PopUp)
            .TemplateName("MyTemplateName")
            .Window(w => w.Width(500))
            .Window(w => w.Title("My Template")))
    $('.k-grid-cancel').bind('click', function ( e ) {
    colorCommandCells();
});
但是,如果我将处理程序/样式恢复到此处的网格行,编辑器的关闭过程将撤消我所做的操作

一句话:我怎么知道编辑器已经完成了网格的更新(正如我所描述的,即使编辑器被取消了,它也会更新网格),以及编辑器弄乱了哪一行

这是为命令单元格着色的代码:

    function colorCommandCells() {
    // This block colors the command cell according to ISNEW.  It must run every time the DataBound event occurs.
    var grid = $("#GridINT").data("kendoGrid");
    var gridData = grid.dataSource.view();
    for (var i = 0; i < gridData.length; i++) {
        var currentUid = gridData[i].uid;
        var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
        var editButton = $(currentRow).find(".k-grid-edit");
        var aColor = gridData[i].ISNEW == 1 ? "#FFCCFF" : "transparent";
        var aText = gridData[i].ISNEW == 1 ? "Add" : "Edit";
        var parent = $(editButton).closest("td");
        $(parent[0]).css('background-color', function () { return aColor; });
        editButton[0].innerHTML = "<span class=\"k-icon k-edit\"></span>" + aText;
    }
}
函数colorCommandCells(){ //此块根据ISNEW为命令单元格着色。每次发生数据绑定事件时,它都必须运行。 var grid=$(“#GridINT”).data(“kendoGrid”); var gridData=grid.dataSource.view(); 对于(var i=0;i基本上,每次操作后网格都会反弹,最好使用附加到网格主体的事件,或者在每次网格事件发生时绑定事件。

这个答案有两个部分:第一,在为网格构建数据源时,为同步事件分配一个函数

.Events(e => e.Sync("syncGrid"))
另外,在构建网格时,为取消事件指定一个函数

.Events(e => e.DataBound("gridIsDataBound").Cancel("cancelEditor").Edit("gridEdit"))
您必须同时拥有这两个选项,因为如果通过“提交”关闭弹出编辑器,则会触发同步事件;如果通过“取消”或“X”关闭弹出编辑器,则会触发取消事件。这两个函数都应该调用这样的函数,其中colorACommandCell是恢复样式值的地方:

function closeEditor() {
    var timer;
    clearTimeout(timer);
    timer = setTimeout(colorACommandCell, 100);
}

编辑器关闭后仍有一些与网格相关的活动发生(这就是clobbers my style调整的内容)。我发现,如果我将我的“修复”排队等待0.1秒,那么它们就不会被覆盖。但是,理想情况下,我希望在编辑器真正完成时触发一个更确定的事件。我不希望在每台运行我的代码的机器上都能信任这个计时器。

我有一个数据绑定处理程序,但当我取消编辑器时,它不会起作用。其他行(未参与编辑的行)也不受影响。如果我过滤网格,数据绑定会命中,但(显然)不仅仅是因为我编辑了一行。然后处理程序应该保留,您如何绑定该mouseup处理程序?最初,我使用$('.k-grid-content tr')。bind('mouseup')。当我转换为委托方法时,$('.k-grid-content tbody)。在('mouseup',tr',上,处理程序保留。但是(不公平!由两部分组成的问题),样式更改(我编辑问题以显示代码)仍然丢失,这些更改不是事件驱动的,我可以恢复样式。这告诉我,在取消事件之后发生了一些事情,如果我等待它,我就没事了。仍然悬而未决的问题是:我如何知道编辑器已完全完成网格更新(如前所述,即使编辑器被取消,它也会这样做,调用同步或取消事件后也会这样做)?这仍然不能回答问题:我如何知道编辑器已完成网格更新(如前所述,即使编辑器被取消,它也会这样做)?