【问题标题】:Tracking all events that an object ever dispatches跟踪对象曾经调度的所有事件
【发布时间】:2013-08-13 11:48:43
【问题描述】:

我想知道实现IEventDispatcher 的对象是否真的调度了任何东西。我无法监听所有可能的事件,而且似乎我无法覆盖子类中的 dispatchEvent() 方法来跟踪对象的底层功能 - 正在调度事件,触发侦听器,但覆盖方法不是叫。那么,我怎样才能知道一个 unknown 事件是否已经被调度,并且至少得到它的类型呢?有问题的特定对象是TextField,因为我想跟踪通过任何可用方法更改其文本的尝试,并对更改做出反应。 The question where this originated.

【问题讨论】:

  • 我很确定你可以覆盖 dispatchEvent,但是如果不看你的代码就很难说出了什么问题。
  • @AmyBlankenship 我正是这样做的,override public function dispatchEvent(event:Event):Boolean { trace(event.type); return super.dispatchEvent(event); } 并实例化了一个子类,而被覆盖的函数只是没有被调用。我的意思是我需要观察一个实例触发的事件,而不是跟踪文本属性的特定问题。
  • 您是在 Flash pro、Builder 中执行此操作的吗?您确定实际使用了子类吗?例如,您实际上不能在舞台上创建 TextField 的子类——您必须通过代码进行实例化。这适用于任何 InteractiveObject,还是仅发生在 TextField 子类上?
  • @AmyBlankenship FlashDevelop,因此没有阶段和完全控制我要实例化的内容。所以是的,使用了子类。我还没有检查其他交互式对象,但我需要一个正在调度事件的对象。加载器可能会这样做,因为它调度了相当多的事件。

标签: actionscript-3 events


【解决方案1】:

TextField 是一个documented class,你实际上有一个它可以调度的所有事件的列表,所以你可以收听所有这些事件(我不能提供更多关于覆盖 dispatchEvent 的信息,恕我直言它应该可以工作,但我有从未测试过)。

但是,如果您只想跟踪文本的更改,我可以看到两个应该可行的解决方案:

  • 如果您可以覆盖 TextField 类并将其实例化,那么您可以覆盖文本设置器:override public function set text(text:String):void

  • 另一种解决方案是在Event.ENTER_FRAME 上放置一个事件侦听器,并在那里检查 TextField 的 text 属性是否已更改。这更残酷,但在您不自己创建 TextField 的情况下会起作用。

【讨论】:

  • 我已经测试了覆盖 dispatchEvent,但它不起作用。关于子类化 TextField - 是的,我可以做到这一点,我只想要一个通用的解决方案,它应该适用于每个 IEventDispatcher。带有适当解释的否定答案也可以。
猜你喜欢
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多