参考了:http://hi.baidu.com/chongshe/item/cb0976b7cde4c17e254b09bc之后,发现把登录框独立成Group组件之后,无法触发事件.下面贴下我的全部代码:
1.LoginEvent.as
package { import flash.events.Event; public class LoginEvent extends Event { public static const USER_LOGIN : String = "userLogin"; private var resMsg : String; public function LoginEvent(type:String, resMsg:String, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); this.resMsg = resMsg; } public function getResMsg() : String { return resMsg; } override public function clone() : Event { return new LoginEvent(type, resMsg); } } }
2.Login.mxml:
<?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ protected function btnLogin_clickHandler(event:MouseEvent) : void { if (true) { // 这里可以检验登录 : tiUserName.text='用户名' && tiPassWord="密码" var evt:LoginEvent=new LoginEvent(LoginEvent.USER_LOGIN, "登录成功"); parentApplication.dispatchEvent(evt); } } ]]> </fx:Script> <s:Panel title="用户入口"> <s:Form> <s:FormItem label="用户名:" width="100%"> <s:TextInput id="tiUserName" /> </s:FormItem> <s:FormItem label="密码:" width="100%"> <s:TextInput id="tiPassWord" /> </s:FormItem> <s:FormItem width="100%"> <s:layout> <s:HorizontalLayout horizontalAlign="center"/> </s:layout> <s:Button id="btnLogin" width="70" height="25" label="按钮" click="btnLogin_clickHandler(event)" horizontalCenter="0" verticalCenter="0"/> </s:FormItem> </s:Form> </s:Panel> </s:Group>
3.MainApp.mxml:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:view="*" creationComplete="app_creationCompleteHandler()"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.FlexEvent; protected function app_creationCompleteHandler():void { this.addEventListener(LoginEvent.USER_LOGIN, userLoginHandler); } private function userLoginHandler(e:LoginEvent):void{ trace(e.getResMsg()); Alert.show(e.getResMsg(),"提示"); } ]]> </fx:Script> <view:Login verticalCenter="0" horizontalCenter="0" /> </s:Application>