01.20How to remove Event Listeners with parameters / closure?
On my last post, shaokai asked me how to remove those event handlers added dynamically with parameters and I think it’s a really good question, so I’m posting the solution here too.
Actually, I never tried to remove the listener, but you can’t do this the same way you add the listener. So I found two different solutions to this problem. First, but maybe not the best solution, you can keep a reference to your handler, like this:
1 2 3 4 5 6 7 8 | // Keep the reference var myHandler:Function = buttonHandler(0x0000FF); // Add the listener myComponent.addEventListener(MouseEvent.CLICK, myHandler); // Remove the listener myComponent.removeEventListener(MouseEvent.CLICK, myHandler); |
This solution is valid when you can keep references to your handlers, but when you have many handlers with different parameters, it’s hard to keep all the references. So I found a generic solution to remove event listeners, so you can do this, inside your handler function:
1 2 3 4 5 6 7 8 9 10 | private function buttonHandler(color:uint):Function { return function(event:MouseEvent):void { box.setStyle("backgroundColor", color); // Remove the handler event.currentTarget.removeEventListener(event.type, arguments.callee); } } |
Thx a lot!
I get it!
January 20th, 2010 at 10:30