在as3中,如果我向对象添加相同的事件侦听器,则为例子
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
我需要两次删除该侦听器吗?
如何获取对象上的列表或事件侦听器数量?
答案 0 :(得分:7)
不,在这种情况下,您不需要两次删除侦听器。
您需要在两种情况下删除多个侦听器:
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 );
因此,您只需要删除以不同方式注册的事件。
您无法使用Flex中提供的开箱即可获得事件侦听器的计数,但您可以使用hasEventListener(type)
检查它是否具有针对特定类型事件的事件侦听器。
但是,由于提供了源代码,您可以“猴子修补”UIComponent或FlexSprite类来添加此功能,如this blog中所述。实际上,你甚至不必这样做。代码在示例中提供。很酷。
答案 1 :(得分:2)
不,你不需要删除两次。您只能创建一个注册。 此外,您正在使用弱引用(通过设置最后一个参数,useWeakReferences为true)。这样可以更容易推理。
文档中有一节描述了为同一个侦听器函数创建两个侦听器注册的情况。