事件机制 as与mxml 两种方式代码

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;
        }
    }
}

自定义的组件如下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
        {
            //当点击按钮时,产生click事件,并进入clickHandler()处理;此处抛出自定义事件到上层组件
            dispatchEvent( new MyEvent( 'abc' , 'et'));       
        }
    ]]>
</ 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 >

 

 ****<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'));//向上抛出事件
        }
    }
}

 主应用如下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 >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值