我创建了一个对话框,其中有一些带有事件的按钮。当我销毁对话递归编程或通过按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');
});
答案 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