javascript - 是否可以断开 Dojo 中所有事件处理程序的连接?

标签 javascript memory-leaks dojo

我正在使用的一些代码将一些具有 Dojo 事件监听器的 HTML 元素替换为来自 AJAX 调用的新 HTML(使用 .innerHTML=)。我读到,在替换事件监听器之前,应使用 dojo.disconnect(handle) 方法断开事件监听器的连接,以防止内存泄漏。

是否可以派生连接到特定元素的所有句柄,以便我可以将每个句柄传递给 .disconnect(handle),或者由我在代码中维护此列表?

最佳答案

实际上,如果您使用小部件,它们通常应该在 tehir destroy() 方法中断开连接。如果您自己处理节点,我认为您可以采用两种方法。

1)手动管理所有连接,意味着将它们存储在某个地方。 2)可能更安全:将所有连接处理程序存储在它们连接的节点中,如下所示:

node._connectHandlers = [];
node._connectHandlers.push(dojo.connect(node, "onclick", ...));

稍后您可以使用以下命令将它们全部断开

dojo.query("*", nodeContainingConnects).forEach(function(node){
    if (typeof node._connectHandlers!="undefined"){
        dojo.forEach(node._connectHandlers, "dojo.disconnect(item)");
    }
});

实际上,这可能工作得很好,但可能有一种更有效的方法来获取节点的所有连接。我只是没找到。第h

关于javascript - 是否可以断开 Dojo 中所有事件处理程序的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870750/

相关文章:

javascript - 触发缩放事件(或模拟缩放事件)

c - 内存分配,输出垃圾

javascript - 浏览器问题: Charts are not rendered on IE8

javascript - 如何让这个图片 slider 拼图开始洗牌而无需按下按钮?

javascript - 如何以 Angular 检索对象详细信息?

javascript - 为什么 serializeArray() 返回小回车箭头而 val() 不返回?

javascript - gridx lazyedit 使用 Dojo.JsonRest 调用 grid.model.save() 解析 500 put 响应

iOS - Admob 内存泄漏

.net - 阅读有关导致 WPF 中的内存泄漏的数据绑定(bind)的资源?

css - dijit/layout/ContentPane 的自定义 CSS 类