[AS3.0]EventManager

ACTIONSCRIPT 2008/04/02 08:34 |

이벤트에 인자를 전달해 주기 위해서 CustomEvent를 만드는 것도 일입니다.
그래서 이벤트 관리자를 저 처럼 만들어 사용 하시는 분들도 많이 계실텐데 혹시라도 고생을 하시는 분들이 있다면 필요한 분들이 계실꺼란 생각에 공유해봅니다.

var AH:URLLoader = new URLLoader();  
var req:URLRequest = new URLRequest();
req.url = url;
arg1:String = "test";
arg2:String = "test2";
EventManager.addEvent(AH, Event.COMPLETE, onLoadHandler, arg1 ,arg2);
AH.load(req);

private function onLoadHandler(evt:Event,arg1,arg2){
 trace(arg1) // output  "test"
 trace(arg2) // output  "test2"
}

이벤트의 삭제는 이벤트 대상자와 이벤트 타입을 넘겨 주면 됩니다.
EventManager.removeEvent(AH, Event.COMPLETE);


/**
 * @version 0.1
 * @author lovedev
 */
package net.asjs{
 
 /**
  * 사용방법
  * EventManager.addEvent
  * "이벤트가 할당될 객체","이벤트 타입","리스너","전달할 인자값...N"
  */
 
    import flash.events.Event;
    import flash.events.IEventDispatcher;  
    import flash.utils.Dictionary;
 
    public class EventManager {
 
  private static var eventList:Dictionary = new Dictionary();
 
  /**
   * 오브젝트에 이벤트 추가하기
   * @param target
   * @param eventType
   * @param listener
   * @param ...rest
   */
  public static function addEvent (
   targetIED:IEventDispatcher,
   eventType:String,
   listener:Function,
   ...rest ) : void {
   
   if (!eventList[targetIED]) eventList[targetIED] = new Object();
            eventList[targetIED][eventType] = new Object();
   eventList[targetIED][eventType].listener = listener;
   eventList[targetIED][eventType].args = rest;
            targetIED.addEventListener(eventType, onDispatchEvent);                       
        }
       
  /**
         * 이벤트 할당자
         * @param evt
         */
        private static function onDispatchEvent(evt:Event):void {  
            var targetIED:IEventDispatcher = evt.currentTarget as IEventDispatcher;           
   var eventType:String = evt.type;
           
   var listener:Function = eventList[targetIED][eventType].listener;
            var args:Array = eventList[targetIED][eventType].args;           
            if(!(args[0] is Event))args.unshift(evt);
            listener.apply(targetIED, args);  
   
        }
 
        /**
         * 이벤트 삭제
         * @param target
         * @param eventType
         */
        public static function removeEvent (
   targetIED:IEventDispatcher, eventType:String ) : void {  
   
   eventList[targetIED][eventType] = null;
            targetIED.removeEventListener(eventType, onDispatchEvent);
        }    
       
    }
}

크리에이티브 커먼즈 라이선스
Creative Commons License

'ACTIONSCRIPT' 카테고리의 다른 글

AS3 lib  (0) 2008/07/15
Flashdevelop Ctrl+Shift+1의 기능  (5) 2008/05/28
[AS3.0] TweenMax  (0) 2008/04/10
[AS3.0]EventManager  (2) 2008/04/02
TextFieldUtil Class  (0) 2008/03/25
imageuploader v0.1  (0) 2008/03/25
ActionScript4.0?  (0) 2008/03/12
PV3D intractive cube  (0) 2008/02/13

Trackback Address :: http://lovedev.tistory.com/trackback/199

댓글을 달아 주세요

  1. 검쉰 2008/04/08 10:30 Address Modify/Delete Reply

    좋은 정보 감사합니다. ;)

    • ActionDev 2008/04/08 11:22 Address Modify/Delete

      좋은 정보가 되었다니 기분이 좋네요 :)

      PS)
      검쉰님께서 공유해주시는 정보도 너무 좋은 정보가 많은거 같습니다. ^^ 저도 자주 눈팅으로 들리곤 합니다 :)