IEventDispatcher中hasEventListener和willTrigger的目的是什么?

时间:2013-05-31 01:18:15

标签: actionscript-3 observer-pattern

我正在以与AS3类似的方式实现项目的观察者模式,即使用IEventDispatcher接口。原因是因为我非常喜欢它。我知道它已收到some critisism,但我喜欢它。

然而,我是一个完美主义者,所以我想尽可能减少它。 IEventDispatcher接口有方法hasEventListener和willTrigger,我真的不明白这些方法有什么用处。据文档所述,我理解它们是用于检查是否有针对特定事件注册的侦听器。但是...... 什么时候会有人想要检查一下?有没有人有这种方法必不可少的用例?

1 个答案:

答案 0 :(得分:2)

我相信在内部有一些对dispatchEvent的调用,它会在调度事件之前首先检查是否存在任何侦听器。我记得这是一个问题,如果某些听众没有注册,其他代码没有执行,虽然我现在不记得确切的情况。

解决这个问题的一个好方法是grep Flex源并看看它们是如何在那里使用的。

修改 刚刚在Flex源4.9.1上为hasEventListener做了一个grep,它出现在151个文件中。很多地方似乎只是在调度事件之前检查是否有任何事件监听器为某些事件类型注册(以避免不必要的事件创建和调度调用我猜)。在搜索willTrigger时,我发现它用于类似的情况。