Flex:浅谈Flex事件机制
一直对RIA技术非常感兴趣,研究了一下Flex的事件机制,发现Flex的事件机制和Javascript很像,只不过更加严格。在Flex的事件机制中有一个比较重要的概念dispatchEvent,基本原理就是事件所在的容器类初始化的时候注册其事件监听函数。如果需要自己定义Event类型,需要将事件分发到事件队列中,也就是dispatchEvent。也就是你要手动找到自定义的事件的前一个事件,在这个结束的时候调用dispatchEvent(event),这个event就是你自定一个事件,这个事件(一个类)一定要继承flash.events.Event。
给个例子:
自定义的事件类:
public class AddressFormEvent extends Event { public static const SUBMIT:String = “submit”; private var _data:AddressVO; public function AddressFormEvent (eventName:String) { super (eventName); } public function set data (value:AddressVO):void { _data = value; } public function get data ():AddressVO { return _data; } } 在上一个事件结束的时候发布这个事件,下面这段代码就是找到上一个事件: public class AddressFormClass extends Form { public var submitButton:Button; public var nameInput:TextInput; public var street:TextInput; public var city:TextInput; public var state:TextInput; public var country:CountryComboBox; public var otherInput:TextInput; public var otherText:Text; public function AddressFormClass():void { addEventListener(FlexEvent.CREATION_COMPLETE,creationCompleteHandler); } private function creationCompleteHandler(event:FlexEvent):void { submitButton.addEventListener(MouseEvent.CLICK,submitHandler); } private function submitHandler(event:MouseEvent):void //这个就是上一个事件的监听函数 { // Gather the data for this form var addressVO:AddressVO = new AddressVO(); addressVO.name = nameInput.text; addressVO.street = street.text; addressVO.city = city.text; addressVO.state = state.text; addressVO.country = country.selectedItem as String; // 下面就是创建这个事件自定义事件,注意类型就是我们刚刚建的那个事件类。 var submitEvent:AddressFormEvent = new AddressFormEvent(AddressFormEvent.SUBMIT); submitEvent.data = addressVO; // Dispatch an event to signal that the form has been submitted dispatchEvent(submitEvent); //这就是发布这个时间 } }