自定义事件大概有四步:
一:创建自定义事件类
package com.beyondsoft.events { import com.beyondsoft.vo.Book; import flash.events.Event; public class BookEvent extends Event { public static var ADDBOOK:String="addbook";//事件类型 public var book:Book;//添加book的对象 public function BookEvent(type:String, bookValue:Book, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable);//这句必须要写 this.book=bookValue; } //重写clone方法 override public function clone():Event{ return new BookEvent(type,book); } } }
2 利用[Event]定义事件
<mx:Metadata> [Event(name="addbook",type="com.beyondsoft.events.BookEvent")] </mx:Metadata>
3 触发事件
private function addBookEvent():void{ var book:Book=new Book(); book.name="name"; book.author="author"; var bookEvent:BookEvent=new BookEvent(); bookEvent.book=book; dispatchEvent(bookEvent); }
4 注册BookEvent的监听器
private function init():void{ btn.addEventListener(BookEvent.ADDBOOK,addBook); } private function addBook(event:BookEvent):void{ var book:Book=event.book; Alert.show(book.name); }
flex开发的精髓在于:基于组件的事件驱动开发,事件可以用在多窗口的传值中,事件是传值的“信使”,自定义事件可以共享数据。
如果熟练掌握了flex的事件机制后就要研究下flex的mvc开发模型了,请参考cairngorm学习笔记一这篇文章