【问题标题】:Kendo Grid - PopUp windows not being removed from the DOMKendo Grid - 弹出窗口未从 DOM 中删除
【发布时间】: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


【解决方案1】:

经过多次反复试验和深入研究,事实证明这个问题与我们网站布局中的脚本有关。在某些时候,无论谁设置了剑道脚本,不仅会放入“kendo.all.min.js”,而且会在“kendo.web.min.js”、“kendo.aspnetmvc.min.js”之后放入大约 10 个人kendo.*.js 包括网格。

查看此链接后:

http://docs.telerik.com/kendo-ui/getting-started/javascript-dependencies

我意识到该网站多次创建这些对象。根据上面的链接删除脚本引用可以解决问题。

【讨论】:

  • 很好的发现,你一定很苦恼才找到问题。
  • 如果在检测到这种情况时发出某种错误或控制台消息会很好。