dispatchEvent 与 addEventListener
来源:互联网 发布:linux删除非空子目录 编辑:程序博客网 时间:2024/05/18 00:50
先假设我们有一个自定义事件类型MyEvent.OPEN_QQ(打开QQ的自定义事件)
首先定义一个显示对象(注意所有显示对象都是EventDispatcher的直接或间接子类,EventDispatcher中定义了dispatchEvent方法)
var
a:Sprite =
new
Sprite();
a.addEventListener(MyEvent.OPEN_QQ, openqq);
//添加打开QQ这个事件的监听器
最关键的地方来了:当你打开qq时,理论上讲你已经触发了打开qq这个事件。但是由于MyEvent.OPEN_QQ事件是一个自定义事件,flash系统是不可能通知a对象已经发生了MyEvent.OPEN_QQ这个事件的,这里就必须有一种让a知道发生了MyEvent.OPEN_QQ这个事件的一种机制,于是dispatchEvent登场了,你在任何时候调用如下面的语句3,flash都会告知a已经发生了MyEvent.OPEN_QQ这个事件,你可以执行了相应的事件处理函数了(此处为openqq),于是openqq(e:MyEvent)函数被执行。
3
、a.dispatchEvent(
new
MyEvent(MyEvent.OPEN_QQ));
下面对这两行代码针对dispatchEvent的原理做分析:
此处的a即为原理中所提到的调用者
由dispatchEvent(Object)方法的参数我们知道,参数必须为Event类型,所以参数Object必须为Event类的实例,所以由上面代码中new MyEvent(MyEvent.OPEN_QQ)可以得出MyEvent的类定义应该为下面形式:
public
class
MyEvent
extends
Event{
//下面的语句定义了事件类型常量,此处为打开QQ这个事件的标识符
public
static
const
OPEN_QQ:
String
=
"openQQ"
;
//构造函数
public
function
MyEvent(type:
String
){
super
(type);
}
}
上面的MyEvent即为我们的自定义事件类,MyEvent.OPEN_QQ即为其中的一个自定义事件
我们一般在系统事件中调用dispatchEvent方法通知自定义事件的发生(当然你可以在任何地方)。
例子:当我点击舞台时,通知a发生了MyEvent.OPEN_QQ事件
完整过程如下:
var
a:Sprite =
new
Sprite();
a.addEventListener(MyEvent.OPEN_QQ, openqq);
stage.addEventListener(MouseEvent.CLICK, handle);
//注册一个鼠标点击舞台的监听器
private
function
handle(e:MouseEvent):
void
{
//当鼠标点击舞台时,我们通知a对象发生了打开qq这个事件,a对象会执行openqq函数
a.dispatchEvent(
new
MyEvent(MyEvent.OPEN_QQ));
}
private
function
openqq(e:MyEvent):
void
{
//执行打开qq的代码,此处略...
}
当然上面的自定义事件还可以加相应的事件属性,如
public
class
MyEvent
extends
Event{
//下面的语句定义了事件类型常量,此处为打开QQ这个事件的标识符
public
static
const
OPEN_QQ:
String
=
"openQQ"
;
//自定义属性
public
var
myAttribute:
String
=
"Test"
;
//构造函数
public
function
MyEvent(type:
String
){
super
(type);
}
}
- dispatchEvent 与 addEventListener
- dispatchEvent 与 addEventListener
- flex自定义事件(包括DispatchEvent与addEventListener)传参
- attachEvent与addEventListener区别
- attachEvent与addEventListener区别
- addEventListener()与removeEventListener()
- attachEvent与addEventListener区别
- attachEvent 与 addEventListener
- addEventListener()与removeEventListener()
- addEventListener()与removeEventListener()
- addEventListener()与removeEventListener()
- addEventListener()与removeEventListener()
- attachEvent 与addEventListener 区别
- addEventListener()与removeEventListener()
- addEventListener()与removeEventListener()
- attachEvent与addEventListener区别
- addEventListener()与removeEventListener()
- addEventListener()与handleEvent()
- 编程题----怎么判断两个浮点数相加是否等于另一个浮点数?
- Java之JDK环境配置过程(图)
- Jqgrid入门
- android 自定义SeekBar 问题
- java实现超链接按钮JButton,可以打包为jar实现代码重
- dispatchEvent 与 addEventListener
- 编程基础----int main(int argc,char* argv[])详解
- linux内核调试指南<十四>--附录:内核参考书籍文章
- 银行家算法例题
- JVM Dump 文件查看
- java实现超链接标签JLabel,可以自行打包成jar
- Window程序的安装与部署
- VBScript 连接Oracle和SQL Server
- 递归算法