【发布时间】:2014-06-05 19:59:29
【问题描述】:
我有一个带有自定义弹出窗口的剑道网格:
columns.Command(commands =>
{
commands.Edit();
}
.Editable(editing => editing.Mode(Kendo.Mvc.UI.GridEditMode.PopUp))
每次我单击编辑按钮时都会弹出窗口,但是当我关闭它时,窗口并没有从 DOM 中删除。
我看到了这个帖子:http://www.telerik.com/forums/popup-windows-do-not-get-removed-from-dom,Telerik 说这个问题已经解决了。
哪些因素会导致这种行为?
更新
如果有帮助,此网格将嵌套在 Kendo TabStrip 中。除此之外,我没有看到任何不寻常的地方。弹出窗口完全由网格管理。
更新 2 所以我得到了网格的未最小化代码(kendo.grid.min.js,版本 2013.3.1119,从第 1172 行开始),将它放入我的项目并使用两个日志语句修改以下内容以验证销毁正在被绑定和调用:
_destroyEditable: function () {
var that = this;
var destroy = function () {
if (that.editable) {
// My edit
console.log("...destroy() called");
that._detachModelChange();
that.editable.destroy();
that.editable = null;
that._editContainer = null;
}
};
if (that.editable) {
if (that._editMode() === "popup") {
// My edit
console.log("Binding destroy() to 'deactivate'...");
that._editContainer.data("kendoWindow").bind("deactivate", destroy).close();
} else {
destroy();
}
}
},
每次单击编辑然后关闭窗口时,我都会看到预期的两条消息,但该窗口并未被删除。这是调试器的截图:
轮廓窗口是生成的 dom 元素。
【问题讨论】:
-
关闭窗口不会删除 DOM,这是效率问题的预期行为,不必多次创建它。问题是它是否被多次创建。如果你想删除它(你真的需要它吗?)你应该调用
destroy方法(但我不认为你真的需要它) -
我没有创建窗口。当您单击添加到网格中每一行旁边的“编辑”按钮时,网格正在创建它。每次我单击“编辑”时,都会弹出窗口(实际上是一个新窗口)。关闭它后,我可以检查调试工具并看到 DOM 中有一个新窗口。它在关闭时不会移除窗口,并且不会在后续打开时重新使用它。
-
如果是这样,那将是一个错误。但是看看下面的代码jsfiddle.net/OnaBai/TgDYx/1,你会看到现有窗口的计数器是 0 或 1,但不会超过这个值。所以它很可能是你的代码中的一些东西,你没有显示的东西。
-
这就是为什么我要问什么样的事情会导致这种情况。
-
我需要查看更多代码。您是否有任何
preventDefault会阻止 KendoUI 处理窗口?您正在管理什么类型的活动?您在浏览器控制台中遇到任何错误吗?
标签: kendo-ui kendo-grid kendo-asp.net-mvc