flex event(zhuan)
- package com.montage.vo
- {
- public class User
- {
- public function User() {}
- public var name:String;
- public var country:String;
- }
- }
package com.montage.events
- {
- import com.montage.vo.User;
- import flash.events.Event;
- public class UserEvent extends Event
- {
- public static var SELECTED_USER:String = "selectedUser";
- public var user:User;
- public function UserEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
- {
- super(type, bubbles, cancelable);
- }
- }
- }
- package com.montage.model
- {
- import flash.events.Event;
- import flash.events.EventDispatcher;
-
- [Event(name="selectedUser", type="com.montage.events.UserEvent")]
- public class EventMessage extends EventDispatcher
- {
- private static var instance:EventMessage = null;
- public function EventMessage()
- {
- if( instance != null )
- {
- throw new Error("EventMessage是一個單件類,只能被實例化一次!");
- }
- }
- public static function getInstance():EventMessage
- {
- if( instance == null )
- {
- instance = new EventMessage();
- }
- return instance;
- }
- public function send( event:Event ):void
- {
- dispatchEvent( event );
- }
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" title="選擇用戶">
- <mx:Script>
- <![CDATA[
- import mx.controls.Alert;
- import com.montage.events.UserEvent;
- import com.montage.vo.User;
- import com.montage.model.EventMessage;
- import mx.managers.PopUpManager;
- private var eMessage:EventMessage = EventMessage.getInstance();
- private function submitHandler():void
- {
- if( grid.selectedIndex > -1 )
- {
- var item:XML = XML( grid.selectedItem );
- var user:User = new User();
- user.name = item.@name;
- user.country = item.@country;
- var event:UserEvent = new UserEvent( UserEvent.SELECTED_USER );
- event.user = user;
- eMessage.send( event );
- cancelHandler();
- }
- else {
- Alert.show("請選擇一個用戶!");
- }
- }
- private function cancelHandler():void
- {
- PopUpManager.removePopUp( this );
- }
- ]]>
- </mx:Script>
- <mx:XML id="users" source="user.xml"/>
- <mx:DataGrid id="grid" width="100%" height="100%" dataProvider="{users.User}">
- <mx:columns>
- <mx:DataGridColumn headerText="姓名" dataField="@name"/>
- <mx:DataGridColumn headerText="國家" dataField="@country"/>
- </mx:columns>
- </mx:DataGrid>
- <mx:ControlBar width="100%">
- <mx:Spacer width="100%"/>
- <mx:Button label="確定" click="submitHandler()"/>
- <mx:Button label="取消" click="cancelHandler()"/>
- </mx:ControlBar>
- </mx:TitleWindow>
- <User name="David" country="America"/>
- <User name="Tome" country="Canada"/>
- <User name="Montage" country="China"/>
- </root>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()" fontSize="12">
- <mx:Script>
- <![CDATA[
- import com.montage.events.UserEvent;
- import com.montage.model.EventMessage;
- import mx.managers.PopUpManager;
- import com.montage.view.user.UserList;
- private var eMessage:EventMessage = EventMessage.getInstance();
- private function init():void
- {
- eMessage.addEventListener(UserEvent.SELECTED_USER, selectedUserHandler);
- }
-
- private function selectedUserHandler( event:UserEvent ):void
- {
- textArea.htmlText = "你選擇了:<b>" + event.user.name + "</b>("+ event.user.country +")";
- }
-
- private function clickHandler():void
- {
- var userList:UserList = UserList( PopUpManager.createPopUp(this, UserList, true) );
- userList.x = ( width - userList.width ) / 2;
- userList.y = ( height - userList.height ) / 2;
- }
- ]]>
- </mx:Script>
- <mx:Panel width="400" height="300" layout="vertical" paddingLeft="5" paddingRight="5" paddingTop="5">
- <mx:TextArea id="textArea" width="100%"/>
- <mx:Button label="選擇用戶" click="clickHandler()"/>
- </mx:Panel>
- </mx:Application>