重复事件监听器的数量?

jed*_*ikb 4 flash actionscript-3

在as3中,如果我向对象添加相同的事件侦听器,则为例

txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
Run Code Online (Sandbox Code Playgroud)

我需要两次删除该监听器吗?

如何获取对象上的列表或事件侦听器数?

Mir*_*lus 7

不,在这种情况下,您不需要两次删除侦听器.

您需要在两种情况下删除多个侦听器:

  1. 如果添加两个具有不同侦听器函数的事件侦听器:

    txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
    txtField.addEventlistener( Event.CHANGE, changeCb2, false, 0, true );

  1. 如果您在捕获阶段设置了一个要触发的事件:

    txtField.addEventlistener( Event.CHANGE, changeCb, false, 0, true );
    txtField.addEventlistener( Event.CHANGE, changeCb, true, 0, true );

因此,您只需要删除以不同方式注册的事件.

您无法使用Flex中提供的开箱即可获得事件侦听器的计数,但您可以使用hasEventListener(type).来检查它是否具有针对特定类型事件的事件侦听器.

但是,由于提供了源代码,您可以"猴子修补"UIComponent或FlexSprite类来添加此功能,如本博客中所述.实际上,你甚至不必这样做.代码在示例中提供.很酷.