• 可随意添加事件属性的超级事件类superEvent [返回文章列表]     发表于: 2009-2-8  914人(次)浏览
  • 在我们以往发出事件的时候,经常无法添加自己额外的属性,现在写了这个事件类可以提供大家使用.

    类名:超级事件 superEvent
      说明:发送事件时,可以自己任意发送更多自定义的参数。
      构造函数:(type:String,obj:Object=null,bubbles:Boolean=false,cancelable:Boolean=false)
      继承至:flash.events.Event
      方法:
      public function  get content():Object
      public function set content(obj:Object):void
      作者:yi【奥博瑞德】
      网站:

    要获取事件传递过来的自定义信息,使用e.content就可以了。

    先看效果,这是一个简单登录的界面,登录的三个信息用户名、密码和是否记住是通过事件发布到事件流中,被侦听器侦听到,然后发给相应的函数,在文本框里显示出来。为啥要这样做呢,直接写文本框的值给函数不就可以了么,其实这样做有另外一个道理就是降低文件的耦合度,使之能够尽量重用,同时也是为了做这个例子:

    /demo/superEvent_exsample_cs3.swf

     

    例子:main.as

    //************************************

    // ActionScript file
    package {
     import flash.display.MovieClip;
     import flash.display.DisplayObject;
     import flash.display.Stage;
     import flash.events.*;
     import flash.text.TextField
     import com.ourbrander.Event.superEvent;
     public class main extends MovieClip {
      import fl.controls.RadioButtonGroup;
      import fl.controls.RadioButton;
      import flash.events.MouseEvent;
      private var rem:RadioButtonGroup;
      public function main() {


       addEventListener(Event.ADDED_TO_STAGE, init);


      }
      private function init(e=null) {

       rem=new RadioButtonGroup("rem");
       rem1.group =rem;
       rem1.value=true;
       rem2.group = rem;
       rem2.value=false
      
       
       addEventListener("zhuce",check);
       sumbit_btn.addEventListener(MouseEvent.CLICK,getLoginInfo);

      }//end function
      private function getLoginInfo(e:MouseEvent):void {
              
       
       var userName:String=u_txt.text;
       var passWord:String=p_txt.text;
       var autoLogin:Boolean=rem.selection.value;
       
       //写法1,先生成一个超级事件再定义其属性:
       var login:superEvent=new superEvent("zhuce",null,true);//"zhuce"这里是用户可以自己按照自己的情况设置的事件常数
       login.content={_userName:userName,_passWord:passWord,_autoLogin:autoLogin};
       //写法2,超级事件的时候就定义其属性
       //var login:superEvent=new superEvent("zhuce",{_userName:userName,_passWord:passWord,_autoLogin:autoLogin},true);
       e.target.dispatchEvent(login);//发布至事件流
      }//end function


      private function check(e):void {
       trace(e.target)
       var str:String=""
       for (var i in e._content) {
        str+=[i]+"="+e._content[i]+"\n";
       }
       _txt.text=str
       trace(str);
      }//end function

     }//end class
    }//end package

     

    //************************************

    package com.ourbrander.Event{
     /*
      类名:超级事件 superEvent
      说明:发送事件时,可以自己任意发送更多自定义的参数。
      构造函数:(type:String,obj:Object=null,bubbles:Boolean=false,cancelable:Boolean=false)
      继承至:flash.events.Event
      方法:
      public function  get content():Object
      public function set content(obj:Object):void
      作者:yi【奥博瑞德】
      网站:/#
     
     */

     

    //类的源文件==================================


     import flash.events.Event;
     public class superEvent extends Event {
      import flash.events.Event;
      public var _content:Object;
      public function superEvent(type:String,obj:Object=null,bubbles:Boolean=false,cancelable:Boolean=false) {
       super(type,bubbles,cancelable);
       
       content=obj;
      }

      public function set content(obj:Object):void {
       _content=obj;
      }
      public function get content():Object {
       
       return _content;
      }
      override public function clone():Event {
       return new superEvent(type,content,bubbles,cancelable);
      }
      override public function toString():String {
       return formatToString("superEvent","type","content","bubbles","cancelable","eventPhase");
      }

     }
    }

    //---------------------

    类文件以及例子下载

可随意添加事件属性的超级事件类superEvent [返回文章列表]