And*_*eiM 0 javascript dojo memory-leaks
我正在使用的一些代码替换了一些具有Dojo事件监听器的HTML元素,其中新的HTML来自AJAX调用(使用.innerHTML =).我已经读过,在替换事件监听器之前,应该使用dojo.disconnect(handle)方法断开它们,以防止内存泄漏.
是否可以派生连接到特定元素的所有句柄,以便我可以将每个句柄传递给.disconnect(句柄),还是由我来维护我的代码中的列表?
实际上,如果你正在使用小部件,他们通常应该断开tehir destroy()方法中的东西.如果您自己处理节点,我会看到两种方法.
1)手动管理所有连接,意味着将它们存储在某处.2)可能是更安全的:将所有连接处理程序存储在它们连接的节点中,如下所示:
node._connectHandlers = [];
node._connectHandlers.push(dojo.connect(node, "onclick", ...));
Run Code Online (Sandbox Code Playgroud)
之后你可以简单地断开它们的使用
dojo.query("*", nodeContainingConnects).forEach(function(node){
if (typeof node._connectHandlers!="undefined"){
dojo.forEach(node._connectHandlers, "dojo.disconnect(item)");
}
});
Run Code Online (Sandbox Code Playgroud)
实际上,这可能效果很好,但可能有一种更有效的方法来获取节点的所有连接.我只是没找到它.心连心
| 归档时间: |
|
| 查看次数: |
3857 次 |
| 最近记录: |