In as3, if I add identical event listeners to an object, for examle
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
would I need to remove that listener twice?
How can I get a list or the number of event listeners on an object?
No, you don't need to remove the listener twice in that situation.
You need to remove multiple listeners in two situations:
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true ); txtField.addEventlistener( Event.CHANGE, changeCb2, false, 0, true );
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true ); txtField.addEventlistener( Event.CHANGE, changeCb, true, 0, true );
So you only need to remove events that are registered in a different manner from each other.
You can't get a count of the event listeners with what's provided out of the box in Flex, but you can check if it has an event listener for a specific type of event using the hasEventListener(type)
.
However, because the source code if provided, you can "Monkey patch" the UIComponent or the FlexSprite class to add this functionality, as explained in this blog. Actually, you don't even have to do it. Code is provided in the example. Pretty cool.
No, you would not need to remove twice. You would only create one registration. Also, you are using weak references (by setting the last parameter, useWeakReferences to true). So that makes it even easier to reason about.
There is a section in the docs that describes the cases where you would create two listener registrations for the same listener function.
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With