如何在此函数中正确删除事件侦听器
问题描述:
public function doAddItem(itemConcepto:int):void{
modalCfd = new modalCFDItems();
modalCfd.addEventListener(Event.CLOSE, closeHandler);
modalCfd.addEventListener("addItemResult", addItem_resultHandler);
modalCfd.addEventListener("addItemResize", addItemResize_resultHandler);
PopUpManager.addPopUp(modalCfd, this, true)
PopUpManager.centerPopUp(modalCfd);
}
private function addItem_resultHandler(event:Event):void{
addItemStuff();
PopUpManager.removePopUp(modalCfd);
removeListeners("modalCfd");
}
private function closeHandler(event:CloseEvent):void{
PopUpManager.removePopUp(modalCfd);
removeListeners("modalCfd");
}
public function removeListeners(listener:String):void{
if(listener == "modalCfd"){
modalCfd.removeEventListener("addItemResult", addItem_resultHandler);
modalCfd.removeEventListener("addItemResize", addItemResize_resultHandler);
modalCfd.removeEventListener(Event.CLOSE , closeHandler);
}
}
正如你所看到的,我是一个具有良好实践的新手(几乎任何东西)我如何正确删除事件侦听器?这是我在那里处理的一个弹出窗口。对不起,如果该功能没有多大意义,我简化它以适应*。如何在此函数中正确删除事件侦听器
答
您已经有了对象的引用,所以只需在您的removelisteners函数中使用它。
public function doAddItem(itemConcepto:int):void{
modalCfd = new modalCFDItems();
modalCfd.addEventListener(Event.CLOSE, closeHandler);
modalCfd.addEventListener("addItemResult", addItem_resultHandler);
modalCfd.addEventListener("addItemResize", addItemResize_resultHandler);
PopUpManager.addPopUp(modalCfd, this, true)
PopUpManager.centerPopUp(modalCfd);
}
private function addItem_resultHandler(event:Event):void{
addItemStuff();
PopUpManager.removePopUp(modalCfd);
removeListeners();
}
private function closeHandler(event:CloseEvent):void{
PopUpManager.removePopUp(modalCfd);
removeListeners();
}
public function removeListeners():void{
modalCfd.removeEventListener("addItemResult", addItem_resultHandler);
modalCfd.removeEventListener("addItemResize", addItemResize_resultHandler);
modalCfd.removeEventListener(Event.CLOSE , closeHandler);
}
对不起,我添加了这个条件,因为我的模块有多个弹出窗口实例,我想创建一个函数来删除它们。但即使我删除了该条件,该功能也无法正常工作。 – overmann
你知道,我说得对,我相信弹出窗口表现怪异,因为我在其他条件下将它定位错了,我不想在这里发帖。因为它可能会混淆更多。谢谢。 – overmann