1.14.使用自定义事件以及事件数据传递

1.14.1.问题
我想使用自定义事件类发出事件以及数据。
1.14.2.解决办法
继承flash.events.Event创建类,创建与事件数据相关的属性。
1.14.3.讨论
有时候我们希望发送事件时也附带数据对象以便监听者不用访问发出事件的对象也能访问数据。渲染器或深度嵌入对象通过发出事件通过多个组件到达监听器并发送数据而不需要监听组件去寻找对象及访问其组件。作为一种解决方案,需要创建一个事件类型的类,在事件构造函数中添加需要的数据类型,记得要调用Event的super方法以便Event对象能正确被实例化,例如:
+展开
-ActionScript
package oreilly.cookbook {
import flash.events.Event;
public class CustomPersonEvent extends Event {
public var person:Person;
public var timeChanged:String;
Public function CustomPersonEvent(type:String,bubbles:Boolean=false,
cancelable:Boolean=false,
personValue:Person=null,
timeValue:String=""
)
{
super (type, bubbles, cancelable);
person = personValue;
timeChanged = timeValue;
}
override public function clone():Event {
return new CustomPersonEvent(type, bubbles, cancelable, personValue,timeValue);
}
}
}

在这个自定义Event类,继承的Event.clone方法被重写以便复制CustomPersonEvent自身。如果事件监听器想试图重新发出自定义事件,可以这样写:
+展开
-ActionScript
Private function ustomPersonHandler(event:CustomPersonEvent):void {
dispatchEvent(event);
}

这个发出的事件并不是先前收到的那个,而是使用clone方法创建的CustomPersonEvent 一个复本,如果clone方法没有被重新则会把CustomPersonEvent的所有属性都被复制,那时clone方法返回的将是flash.events.Event而不会有CustomPersonEvent的任何属性。

加支付宝好友偷能量挖...


评论(0)网络
阅读(113)喜欢(0)flash/flex/fcs/AIR