2010-02-23 11:19:55
****<1> MXML****:
事件类如下MyEvent.as
package
ascode
{
import flash.events.Event;
public class MyEvent extends Event
{
public var arg : String; //事件能传递的数据
public function MyEvent( arg : String , type : String)
{
super( type);
this . arg = arg;
}
}
}
{
import flash.events.Event;
public class MyEvent extends Event
{
public var arg : String; //事件能传递的数据
public function MyEvent( arg : String , type : String)
{
super( type);
this . arg = arg;
}
}
}
自定义的组件如下Comp.mxml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
< mx : Canvas xmlns : mx = "http://www.adobe.com/2006/mxml" width = "400" height = "300" >
< mx : Metadata >
[ Event( name = "et" , type = "ascode.MyEvent" )]//声明该组件能向外抛出的事件类型以及事件注册通道et 见主应用中
</ mx : Metadata >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
private function clickHandler (): void
{
< mx : Canvas xmlns : mx = "http://www.adobe.com/2006/mxml" width = "400" height = "300" >
< mx : Metadata >
[ Event( name = "et" , type = "ascode.MyEvent" )]//声明该组件能向外抛出的事件类型以及事件注册通道et 见主应用中
</ mx : Metadata >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
private function clickHandler (): void
{
//当点击按钮时,产生click事件,并进入clickHandler()处理;此处抛出自定义事件到上层组件
dispatchEvent( new MyEvent( 'abc' , 'et'));
dispatchEvent( new MyEvent( 'abc' , 'et'));
}
]]>
</ mx : Script >
< mx : Button id = "bt" label = "press" click = "clickHandler()" />
</ mx : Canvas >
]]>
</ mx : Script >
< mx : Button id = "bt" label = "press" click = "clickHandler()" />
</ mx : Canvas >
主应用如下test.mxml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
< mx : Application xmlns : mx = "http://www.adobe.com/2006/mxml" layout = "absolute" xmlns : ns1 = "*" >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
import mx.controls.Alert;
private function mcclick( event : MyEvent ): void { //这里注意事件类型
Alert . show( event . arg);
}
]]>
</ mx : Script >
< ns1 : Comp et = "mcclick(event)" /> //为在Comp组件中定义的事件注册通道et注册事件处理函数
</ mx : Application >
< mx : Application xmlns : mx = "http://www.adobe.com/2006/mxml" layout = "absolute" xmlns : ns1 = "*" >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
import mx.controls.Alert;
private function mcclick( event : MyEvent ): void { //这里注意事件类型
Alert . show( event . arg);
}
]]>
</ mx : Script >
< ns1 : Comp et = "mcclick(event)" /> //为在Comp组件中定义的事件注册通道et注册事件处理函数
</ mx : Application >
****<2> AS****:
事件类如下MyEvent.as 同上
自定义AS Comp.as
package
ascode
{
import mx.controls.Button;
[ Event( name = "et" , type = "ascode.MyEvent" )]//此处同mxml中一样 均为注册用
public class Comp
{
private var bt : Button;
public function Comp()
{
bt = new Button();
bt . label = 'press';
bt . addEventListener( 'et' , clickHandler); //此处同mxml中 click = "clickHandler()" 在as中只能这样用
}
private function clickhandler (): void
{
dispatchEvent( new MyEvent( 'abc' , 'et'));//向上抛出事件
}
}
}
{
import mx.controls.Button;
[ Event( name = "et" , type = "ascode.MyEvent" )]//此处同mxml中一样 均为注册用
public class Comp
{
private var bt : Button;
public function Comp()
{
bt = new Button();
bt . label = 'press';
bt . addEventListener( 'et' , clickHandler); //此处同mxml中 click = "clickHandler()" 在as中只能这样用
}
private function clickhandler (): void
{
dispatchEvent( new MyEvent( 'abc' , 'et'));//向上抛出事件
}
}
}
主应用如下test2.mxml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
< mx : Application xmlns : mx = "http://www.adobe.com/2006/mxml" layout = "absolute"
xmlns : ns1 = "*" creationComplete = "init()" >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
import mx.controls.Alert;
private function init (): void {
var comp : Comp = new Comp();
this . addChild( comp); //添加组件到主应用中 与mxml形式区别
comp . addEventListener( 'et' , mcclick); //添加事件监听器,监听类型为'et'的事件
}
private function mcclick( event : MyEvent ): void { //这里注意事件类型
Alert . show( event . arg);
}
]]>
</ mx : Script >
</ mx : Application >
< mx : Application xmlns : mx = "http://www.adobe.com/2006/mxml" layout = "absolute"
xmlns : ns1 = "*" creationComplete = "init()" >
< mx : Script >
<![ CDATA [
import ascode.MyEvent;
import mx.controls.Alert;
private function init (): void {
var comp : Comp = new Comp();
this . addChild( comp); //添加组件到主应用中 与mxml形式区别
comp . addEventListener( 'et' , mcclick); //添加事件监听器,监听类型为'et'的事件
}
private function mcclick( event : MyEvent ): void { //这里注意事件类型
Alert . show( event . arg);
}
]]>
</ mx : Script >
</ mx : Application >