Flex自定义事件

[size=medium]Flex自定义事件的一个重要用途是能够把子容器中的信息传递到父容器中。[/size]
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);
}

}
}




[size=medium]其中<son:son x="146" y="132" id="mybt" DataChange="onChange(event)" />中的DataChange="onChange(event) "相当于mybt.addEventListener(EnableChangeEvent.ENABLE_CHANGED, onChange);[/size]
[size=medium]相关知识点:
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实例,会产生类型不匹配的错误。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值