|
这是学习过程中的一些总结,欢迎大家指正。
ActionScript 3.0 之前的 ActionScript 版本中提供许多不同的方法来处理事件:
1.on() 事件处理函数,可以直接放在 Button 和 MovieClip 实例上
2.onClipEvent() 处理函数,可以直接放在 MovieClip 实例上
3.回调函数属性,例如 XML.onload 和 Camera.onActivity
4.使用 addListener() 方法注册的事件侦听器
5.部分实现了 DOM 事件模型的 UIEventDispatcher 类
其中的每一种机制都有其自己的若干优点和局限性。on() 和 onClipEvent() 处理函数易于使用,但使随后对项目的维护变得较为困难,因为很难查找直接放在按钮和影片剪辑上的代码。回调函数也很容易实现,但对于任何指定事件,仅限于使用一个回调函数。事件侦听器较难实现:它们不但要求创建侦听器对象和函数,而且要求向生成事件的对象注册侦听器。这虽然增加了开销,但您可以创建若干侦听器对象,并针对同一个事件注册这些对象。
对 ActionScript 2.0 组件的开发形成了另一个事件模型。该新模型包含在 UIEventDispatcher 类中,并且基于 DOM 事件规范的子集。熟悉组件事件处理的开发人员将会发现过渡到新的 ActionScript 3.0 事件模型相对来说较为容易。
遗憾的是,各个事件模型使用的语法以不同的方式相互重叠,并且在其它方面各自不同。例如,在 ActionScript 2.0 中,某些属性(例如 TextField.onChanged)可用作回调函数或事件侦听器。但是,根据您是否在使用支持侦听器或六个类之一的 UIEventDispatcher 类,用于注册侦听器对象的语法有所不同。对于 Key、Mouse、MovieClipLoader、Selection、Stage 和 TextField 类;请使用 addListener() 方法,但对于组件事件处理,请使用名为 addEventListener() 的方法。
不同事件处理模型所导致的另一个复杂性是:根据所使用的机制的不同,事件处理函数的范围大不相同。也就是说,关键字 this 的含义在各个事件处理系统中并不一致。 |
|