我有一个Kendo Grid,我在这里定义了一个编辑器:
@(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")))
在我使用编辑器之前,我将一个mouseup处理程序绑定到行,然后调整命令按钮的样式。当编辑器关闭时,无论是通过提交,取消还是“X”,我的处理程序和样式调整都会在受影响的行中消失。我需要恢复它们,但我还没有找到有效的事件。我绑定了取消点击事件,如下所示:
$('.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;
}
}
答案 0 :(得分:1)
答案 1 :(得分:0)
这个答案有两个部分:首先,在为网格构建DataSource时,为同步事件分配一个函数。
.Events(e => e.Sync("syncGrid"))
此外,在构建网格时,为Cancel事件指定一个函数。
.Events(e => e.DataBound("gridIsDataBound").Cancel("cancelEditor").Edit("gridEdit"))
您必须同时拥有这两个,因为如果弹出编辑器通过“提交”关闭,则会触发Sync事件,如果弹出编辑器通过“取消”或“X”关闭,则会触发取消事件。这两个函数都应该调用类似这样的函数,其中colorACommandCell是我恢复样式值的地方:
function closeEditor() {
var timer;
clearTimeout(timer);
timer = setTimeout(colorACommandCell, 100);
}
编辑关闭后仍然会发生一些与Grid相关的活动(这就是我的风格调整的blobbers)。我发现,如果我把我的“修复”排队等待0.1秒,那么它们就不会被覆盖。然而,理想情况下,我希望在编辑器真正完成时触发一个更确定的事件。我不希望能够在运行我的代码的每台机器上信任这个计时器。