代码之家  ›  专栏  ›  技术社区  ›  jedierikb grijalvaromero

重复事件侦听器的数目?

  •  4
  • jedierikb grijalvaromero  · 技术社区  · 16 年前

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

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

    我需要删除那个听众两次吗?

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

    2 回复  |  直到 16 年前
        1
  •  7
  •   Mircea Grelus    16 年前

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

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

    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) .

    但是,由于提供了源代码,因此可以“monkey-patch”uicomponent或flexsprite类来添加此功能,如中所述。 this blog . 实际上,你甚至不必这么做。示例中提供了代码。相当酷。

        2
  •  2
  •   drudru    16 年前

    不,您不需要移动两次。您将只创建一个注册。 另外,您使用的是弱引用(通过设置最后一个参数,useweakreferences为true)。这样就更容易推理了。

    文档中有一节描述了为同一侦听器函数创建两个侦听器注册的情况。

    http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener()