【问题标题】:repeat number of event listeners?重复事件监听器的数量?
【发布时间】:2009-07-09 23:45:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 1) 是的,2) 我认为你不能。我很想知道这是否可能,但我的理解是确切的计数是“隐藏的”。
  • 好吧,我的立场是正确的。我仍然对如何确定有多少听众在“听”感到好奇(我相信你也是)。
  • 对于出色的活动经理课程,请查看 Danny Miller 的:k2xl.com/wordpress/2008/07/02/…

标签: flash actionscript-3


【解决方案1】:

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

你需要在两种情况下移除多个监听器:

  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 类来添加此功能,如this blog 中所述。实际上,您甚至不必这样做。示例中提供了代码。很酷。

【讨论】:

    【解决方案2】:

    不,您不需要删除两次。您只会创建一个注册。 此外,您正在使用弱引用(通过将最后一个参数 useWeakReferences 设置为 true)。这样就更容易推理了。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多