因为是自学的flex,才不到一个月,所以这个只是简单的自我理解,有错请大家积极指正,一起学习。
首先自己写一个as,就是自己定义的事件类
CustomEvent.as简单代码如下:
package action.myevent
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class CustomEvent extends Event
{
public var data:Object;
/**
* 定义一个事件分发器,用于分发事件
*/
public static const dispatcher:EventDispatcher = new EventDispatcher();
/**
* 参数说明:
* type:String — 事件的类型,就是自己定义的事件的名字
data:Object - 通过此事件传递的参数
bubbles:Boolean (default = false) — 确定 Event 对象是否参与事件流的冒泡阶段。默认值为 false。
cancelable:Boolean (default = false) — 确定是否可以取消 Event 对象。默认值为 false。
个人对于自定义事件的理解:分发器dispatcher可以看成是一辆小车,自定义事件构造器中的data是放在这辆小车上的一件物品
当自定义事件被分发出去后(类似于把小车推出去了),由监听该自定义事件的方法捕获(即拿到了小车),然后在处理的方法里面
拿到小车上的物品进行处理
*/
public function CustomEvent(type:String,data:Object,bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event{
return new CustomEvent(type,data);
}
}
}
这里我把事件类型单独写了一个as,方便管理
EventNames.as代码:
package action.myevent
{
public class EventNames
{
public static const CATALOGROW:String = "CATALOGROW";
public function EventNames()
{
}
}
}
在mxml中添加自定义事件的监听,并处理数据
private function init():void{
//添加自定义事件的监听,监听到后转到setinfo方法
CustomEvent.dispatcher.addEventListener(EventNames.CATALOGROW,setinfo);
}
private function setinfo(e:CustomEvent):void{
//e:小车,data物品
//从小车上拿物品
catalogsid = e.data as String;
//拿到后的处理
fac.findAuthbyCatalog(catalogsid);
}
当然需要有地方分发“小车”才行,分发自定义事件代码
CustomEvent.dispatcher.dispatchEvent(new CustomEvent(EventNames.CATALOGROW,catalogsid));
可以结合动态树那篇文章一起看