Javascript(Dojo):在销毁对象时删除事件侦听器

时间:2017-04-20 08:22:36

标签: javascript events dojo

我创建了一个对话框,其中有一些带有事件的按钮。当我销毁对话递归编程或通过按X删除所有创建的事件监听器(隐藏,取消,单击1,单击2)?
因为我经常调用这个部分(这里我只发布了我的代码的简化版本)(对于不同的对话框),似乎我的代码可能有一些内存泄漏我想要消除它们。所以请告诉我,像 eventHide.remove(); 一样自行删除事件监听器是否有意义?<
em> 附加:我尝试使用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');
});

1 个答案:

答案 0 :(得分:2)

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

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

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

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