簡體   English   中英

Javascript(Dojo):銷毀對象時是否刪除事件監聽器

[英]Javascript (Dojo): Is event-listener removed when object is destroyed

我創建一個對話框,其中有一些帶有事件的按鈕。 當我以編程方式銷毀對話框或按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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM