JavaScript(道场): Is event-listener removed when object is destroyed

标签 javascript events dojo

我创建了一个对话框,其中有一些带有事件的按钮。当我以递归编程方式销毁对话框或按 X 时,是否删除了所有创建的事件监听器(隐藏、取消、click1、click2)?
因为我经常(针对不同的对话框)调用这部分(这里我只发布了代码的简化版本),并且我的代码似乎可能存在一些内存泄漏,我想消除它们。所以请告诉我,像 eventHide.remove(); 这样自己删除事件监听器是否有必要/有意义?

另外:我尝试使用 on (如 eventHide)来执行点击和取消事件,但它不起作用。

var myDialog = new Dialog({
    content: 'Testdialog'
});

myDialog.show();

var btn1 = new dijit.form.Button({ label: "Ok" });
var btn2 = new dijit.form.Button({ label: "Help" });

myDialog.containerNode.appendChild(btn1.domNode);
myDialog.containerNode.appendChild(btn2.domNode);

var eventHide = on.once(myDialog, "hide", function(e){
    console.log('hide');
    myDialog.destroyRecursive();
});

dojo.connect(btn1, "onClick", function(){
    console.log('click ok');
    myDialog.destroyRecursive();
});

dojo.connect(btn2, "onClick", function(){
    console.log('click help');
    myDialog.destroyRecursive();
});

dojo.connect(myDialog, "onCancel", function(){
    console.log('cancel');
});

最佳答案

您可以使用 dijit/Destroyable 中定义的 this.own,它是 dijit/_WidgetBase 以及大多数小部件的基础(确保您的自定义小部件继承自 hit。)。

dijit/Destroyable 用于跟踪实例的句柄,然后在实例销毁时销毁它们。

更多信息: http://dojotoolkit.org/reference-guide/1.10/dijit/Destroyable.html

http://dojotoolkit.org/reference-guide/1.8/dojo/Evented.html

关于JavaScript(道场): Is event-listener removed when object is destroyed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514033/

相关文章:

javascript - 获取 JSON 数据 - 这里是新手

javascript - 使用闭包编译器和已编译的 vue.js 模板

javascript - NodeJS 中的 varexports = module.exports = {}

javascript - 我如何向 jquery 事件添加函数

python - Tkinter (Python 3.x) 中的不同 "Drag and Drop"图像

events - 忽略 Qt 中的鼠标和键盘事件

javascript - 为什么这个 reduce 方法不给我对象?

java - JSP删除行并保存

javascript - 在哪里可以找到 dojo 版本 1.7.2 的 spring-dojo.js?

javascript - Gridx/道场和 jQuery : Is there a callback when sorting is completed?