Flex4自定义事件
1、自定义事件 2、自定义带参数的事件 ??????? 刚到公司上班没多久,事情不是太多。打酱油的成分占据大多时间。闲着没事学习下Flex。在这之前没有接触过Flex。在理解上面多有拙劣之处。重在交流,总结。还望看到的各位高手能够给予指点。 ??????? 刚做了一个自定义事件,对于我们初学Flex的并且没有人交流的还是有点难度的。之前有过好多前辈写过关于Flex自定义事件的博文。也许对于很多新手理解上有点难度。这里我就简单的通俗的写下自定义事件。 1、 ??????? 自定义事件必须注意几点: ??????? (1)自定义事件通过继承Event类来实现。 ??????? (2)自定义事件不可以自己触发,只能有系统事件派发。 ??????? 了解这两点后现在就可以开始自定义自己的事件了。 ??????? 首先我们新建一个ActionScript Class,这个Class继承flash.events.Event。 package myEvent { import flash.events.Event; public class MyEvent extends Event { public static const MYEVENT:String = "myevent"; public function MyEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false) { super(type,bubbles,cancelable); } override public function clone():Event{ return new MyEvent(type,cancelable); } } } <!--自定义事件继承Event来实现--> ??????? 然后可以创建一个Component,在里面随便添加容器和控件,在控件上面通过系统事件,比如MouseEvent,用来触发事件。注意,这个MouseEvent触发的事件里面通过this.dispatchEvent(evnet:Event)来派发出你自定义的事件。 <?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> <!-- Place non-visual elements (e.g.,services,value objects) here --> </fx:Declarations> <fx:Metadata> [Event(name="myevent",type="myEvent.MyEvent")] </fx:Metadata> <fx:Script> <![CDATA[ import myEvent.MyEvent; private function clickHandle(event:MouseEvent):void{ this.dispatchEvent(new MyEvent("myevent",true,false)); } ]]> </fx:Script> <s:Panel width="400" height="200" title="Show Customize Event" x="200" y="100"> <s:Button label="On this button,I add a custom event...Click it..." id="showevent" top="50" left="50" click="clickHandle(event)"/> </s:Panel> </s:Group> ??????? 最后在创建的Flex工程里面引入这个Component,为这个component添加事件监听器。 <?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" xmlns:myms="component.*" minWidth="955" minHeight="600" creationComplete="init()" xmlns:myComponent="myComponent.*"> <fx:Declarations> <!-- Place non-visual elements (e.g.,value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import myEvent.MyEvent; private function init():void{ component.addEventListener(MyEvent.MYEVENT,clickHandle); } private function clickHandle(event:MyEvent):void{ Alert.show("The type of this event is "+event.type+"nThe currentTarget is "+event.currentTarget+ "nThe target is "+event.target); } private function clickHandleThis(event:MouseEvent):void{ Alert.show("The type of this event is "+event.type+"nThe currentTarget is "+event.currentTarget+ "nThe target is "+event.target); } ]]> </fx:Script> <myComponent:MyComponent id="component" click="clickHandleThis(event)"/> </s:Application> <!--自定义事件--> 2、 ??????? 自定义带参数的事件应该明白: ??????? (1)自定义事件继承Event时的构造函数里面带参数。 ??????? (2)同样需要触发系统事件,然后派发自定义事件。 ??????? 新建一个ActionScript Class,这个Class继承flash.events.Event。 package customEvent { import flash.events.Event; public class TransferData extends Event { public static const CUSTOMEVENT:String = "customevent"; public var loginName:String; public var password:String; public function TransferData(type:String,loginName:String,password:String) { super(type); this.loginName = loginName; this.password = password; } override public function clone():Event{ return new TransferData(type,loginName,password); } } } ??????? 然后创建component来设计并实现数据的传输和接受。 ?????? DispatchData.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" creationComplete="init()"> <fx:Metadata> [Event(name="customevent",type="customEvent.TransferData")] </fx:Metadata> <fx:Declarations> <!-- Place non-visual elements (e.g.,value objects) here --> <mx:Validator id="InputLoginName" source="{loginName}" property="text"/> <mx:Validator id="InputPassword" source="{password}" property="text"/> </fx:Declarations> <fx:Script> <![CDATA[ import customEvent.TransferData; import mx.controls.Alert; private function init():void{ dispatchData.addEventListener(MouseEvent.CLICK,clickHandle); } private function clickHandle(event:MouseEvent):void{ if(loginName.text != "" && password.text != ""){ canDispatchData(); }else{ Alert.show("Please input the content,contain login name and the password!"); } } private function canDispatchData():void{ var loginEvent:TransferData = new TransferData("customevent",loginName.text,password.text); this.dispatchEvent(loginEvent); } ]]> </fx:Script> <s:Panel x="0" y="0" width="300" height="200" title="The DataSource Panel"> <mx:Form x="10" y="10"> <mx:FormItem label="Login Name:" fontWeight="bold" required="true"> <s:TextInput id="loginName"/> </mx:FormItem> <mx:FormItem label="Password:" fontWeight="bold" required="true"> <s:TextInput id="password"/> </mx:FormItem> <s:Button label="DispatchData" id="dispatchData"/> </mx:Form> </s:Panel> </s:Group> ??????? ReceiveData.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> <!-- Place non-visual elements (e.g.,value objects) here --> </fx:Declarations> <s:Panel x="0" y="0" width="300" height="200" title="The DataReceive Panel"> <mx:Form x="10" y="10"> <mx:FormItem label="Login Name:" fontWeight="bold"> <s:TextInput id="loginName" editable="false"/> </mx:FormItem> <mx:FormItem label="Password:" fontWeight="bold"> <s:TextInput id="password" editable="false"/> </mx:FormItem> <s:Button label="ReceiveData" id="receiveData"/> </mx:Form> </s:Panel> </s:Group> ??????? LoginEvent.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" xmlns:component="component.*" creationComplete="init()" width="900" height="400"> <fx:Declarations> <!-- Place non-visual elements (e.g.,value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import customEvent.TransferData; private var loginName:String; private var password:String; private function init():void{ dispatch.addEventListener(TransferData.CUSTOMEVENT,dispatchData); receive.addEventListener(MouseEvent.CLICK,receiveData); } private function dispatchData(event:TransferData):void{ loginName = event.loginName; password = event.password; Alert.show("loginName:"+loginName+"npassword:"+password); } private function receiveData(event:MouseEvent):void{ receive.loginName.text = loginName; receive.password.text = password; } ]]> </fx:Script> <component:DispatchData id="dispatch" x="100" y="100"/> <component:ReceiveData id="receive" x="500" y="100"/> </s:Group> ??????? 在Flex工程里面引入component即可 <?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" xmlns:component="component.*" minWidth="955" minHeight="600" horizontalCenter="0" verticalCenter="0"> <fx:Declarations> <!-- Place non-visual elements (e.g.,value objects) here --> </fx:Declarations> <s:Panel title="Show dispatch and receive data" horizontalCenter="0" verticalCenter="0"> <component:LoginEvent/> </s:Panel> </s:Application> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |