2009年4月27日星期一

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); //这就是发布这个时间
}
}

没有评论:

发表评论