`
longxiaoyan
  • 浏览: 76069 次
  • 性别: Icon_minigender_1
  • 来自: 桂-京
社区版块
存档分类
最新评论

Flex自定义事件

    博客分类:
  • Flex
阅读更多
Flex自定义事件的一个重要用途是能够把子容器中的信息传递到父容器中。
parent.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:son="son.*" creationComplete="init();">
       <mx:Script>
              <![CDATA[
              	import mx.controls.Alert;
					import events.DataChangeEvent;  
					private function init():void{
						//mybt.addEventListener(DataChangeEvent.name,onChange);
						this.addEventListener(DataChangeEvent.name,onChange);
					}       
					
                    private function onChange(e:DataChangeEvent):void{
						Alert.show(e.test);	
                    }
              ]]>
       </mx:Script>
	   <son:son x="146" y="132" id="mybt"  DataChange="onChange(event)"/>
</mx:Application>



son.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Form xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Metadata>
        [Event(name="DataChange", type="events.DataChangeEvent")]
    </mx:Metadata>
    <mx:Script>
    	<![CDATA[
    		import events.DataChangeEvent;
    		private function Change():void{
				var e:DataChangeEvent = new DataChangeEvent("test", "DataChange",true);
				this.dispatchEvent(e);
			}
    	]]>
    </mx:Script>
    <mx:Button label="Button" click="Change()"/>
</mx:Form>


DataChangeEvent.as
package events
{
	import flash.events.Event;

	public class DataChangeEvent extends Event
	{
		public var test:String;
		public static var name:String="DataChange";
		public function DataChangeEvent(test:String,type:String,bubbles:Boolean=false)
		{
			super(type,bubbles);
			this.test=test;
		}
		
		override public function clone():Event{
			return new DataChangeEvent(type,test);
		}
		
	}
}




其中<son:son x="146" y="132" id="mybt" DataChange="onChange(event)" />中的DataChange="onChange(event) "相当于mybt.addEventListener(EnableChangeEvent.ENABLE_CHANGED, onChange);
相关知识点:
dispatchEvent()
dispatchEvent()方法需要用一个参数指定需要发布的事件对象,发布事件时会通知该事件的所有监听者,并执行监听者指定的事件处理函数。
addEventListener()
addEventListener()方法为监听者指定事件处理函数。

默认情况下,捕获功能处于关闭状态,一般没有必要进行捕获跟踪。事件只在bubbles 属性为true 时才进行冒泡,可以冒泡的事件包括:change、click、doubleClick、keyDown、keyUp、mouseDown、 mouseUp。其他自定义事件如果想要冒泡需要设定bubbles为true(默认为false)。如本例中,button监听了DataChangeEvent事件,Application也监听了DataChangeEvent事件,由于bubbles设为true,当button按下之后,button触发了事件之后,Application也会触发。如果bubbles为false,就只有button触发事件(这时只有通过继续分发事件才能使Application触发,继续分发就会涉及到自定义事件需要复写clone方法)。

clone()
clone()方法返回一个新的 Event 对象,它是 Event 对象的原始实例的副本。通常您不需要调用 clone();当您重新调度事件,即调用 dispatchEvent(event)(从正在处理 event 的处理函数)时,EventDispatcher 类会自动调用它。 如果没有复写clone方法,就会调用父类的clone方法,返回父类的event实例,会产生类型不匹配的错误。
1
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics