문제

그것은 삶이나 죽음의 문제는 아니지만 이것이 가능할 수 있는지 궁금합니다.

한 가지 유형의 커스텀 이벤트 (Formevent)에서 몇 가지 이벤트를 받았습니다. 이제 모든 이벤트를 듣고 이벤트 유형에 따라 처리하는 Formlistener를 얻었습니다. 당시에 하나의 eventListener를 추가하는 대신 한 번에 모든 이벤트를 추가하려고합니다.

이제 다음과 같이 보입니다.

        private function addListeners():void {

        addEventListener(FormEvent.SHOW_FORM, formListener);
        addEventListener(FormEvent.SEND_FORM, formListener);
        addEventListener(FormEvent.CANCEL_FORM, formListener);
    }



        private function formListener(event:formEvent):void {

        switch(event.type){
            case "show.form": 
                // handle show form stuff
            break;
            case "send.form":
                // handle send form stuff
            break;
            case "cancel.form":
                // handle cancel form stuff
            break;
        }
    }

그러나 당시에 모든 이벤트를 추가하는 대신 오히려

    private function addListeners():void {

        addEventListener(FormEvent.*, formListener);
    }

이런 것이 가능한지 궁금합니다. 나는 그것을 좋아할 것입니다. 나는 많은 이벤트로 일하고있다 :)

도움이 되었습니까?

해결책

어쨌든이 경우 하나의 이벤트 리스너 만 있으면됩니다. 그 청취자는 이벤트 리스너 기능에 따라 변경 사항이있는 것과 동일한 양식으로 변경 사항을 듣고 있습니다. 나는 당신을 보여줄 것입니다. 그러나 이것은 의사 상황이라는 것을 기억하십시오. 일반적으로 파견이 암시되기 때문에 메소드 호출만큼 간단한 이벤트를 파견하지 않으므로 실제로들을 필요가 없습니다.

먼저 커스텀 이벤트


package com.yourDomain.events
{
    import flash.events.Event;
    public class FormEvent extends Event
    {
        //Public Properties
        public static const CANCEL_FORM:int = "0";
        public static const SHOW_FORM:int = "1";
        public static const SEND_FORM:int = "2";

        public static const STATE_CHANGED:String = "stateChanged";

        //Private Properties
        private var formState:int;

        public function FormEvent(formState:int):void
        {
            super(STATE_CHANGED);
            formState = formState;
        }
    }
}

그래서 우리는 방금 맞춤형 이벤트 클래스를 만들었고, 상기 사용자 정의 이벤트를 위해 파견 될 의사 양식 클래스로 한 번 보여줄 수 있듯이 청취자 기능을 통해 상태를 잡을 수 있도록 설정했습니다.

코드가 어떻게 보이는지 또는 어떻게 구현하는지 전혀 모르기 때문에 이것은 모두 가설입니다. 중요한 것은 이벤트를 파견 할 때 새로운 상태가 무엇인지 반영하는 매개 변수를 보내야한다는 것을 알아 차리는 것입니다.


package com.yourDomain.ui
{
   import flash.events.Event;
   import flash.events.EventDispatcher;
   import com.yourDomain.events.FormEvent;
   public class Form extends EventDispatcher
   {
     public function Form():void
     {
        //Anything you want form to do upon instantiation goes here.
     }
     public function cancelForm():void
     {
        dispatchEvent(new Event(FormEvent.CANCEL_FORM);
     }
     public function showForm():void
     {
        dispatchEvent(new Event(FormEvent.SHOW_FORM);
     }
     public function sendForm():void
     {
        dispatchEvent(new Event(FormEvent.SEND_FORM);
     }
   }
}

그리고 마지막으로 우리는 그것을들을 문서 클래스를 만듭니다. 수업 메소드를 호출 할 때 해고하는 청취자를 만드는 것이 논리적이지 않다는 것을 알고 있습니다.


package com.yourDomain.ui
{
   import com.yourDomain.ui.Form;
   import com.yourDomain.events.FormEvent;
   //Form is in the same package so we need not import it.
   public class MainDocumentClass
   {
      private var _theForm:Form;

      public function MainDocumentClass():void
      {
         _theForm  = new Form();
         _theForm.addEventListener(FormEvent.STATE_CHANGED, onFormStateChange, false, 0, true);
         /*
         The following three method calls each cause the
         FormEvent.STATE_CHANGE event to be dispatched.  
         onFormStateChange is notified and checks what 
         the last change actually was.
         */
         _theForm.cancelForm();
         _theForm.showForm();
         _theForm.sendForm();
      }
      private function onFormStateChange(e:FormEvent):void
      {
         switch(e.formState)
         {
            case CANCEL_FORM:
              trace('The form was canceled');
              break;
            case SHOW_FORM:
              trace('The form was revealed');
              break;
            case SEND_FORM:
              trace('The form was sent');
              break;
         }
      }
   }      
}

나는 이것이 도움이 되었기를 바랍니다. 늦었고 나중에 몇 가지를 수정해야 할 수도 있지만, 이는 자신의 이벤트를 만드는 방법에 대한 이해와 일이 어떻게 작동하는지 사용자 정의하는 데 도움이 될 것입니다.

다른 팁

나는 당신이 직접 그렇게 할 수있는 일상을 모르지만, 당신은 당신 자신의 글을 쓸 수 있습니다. 여기의 구문은 완벽하지는 않지만 여기에 첫 번째 패스가 있습니다.

private function addMultipleEventListeners( evts:Array, callback:function ):void
{
    for each( var evt:Event in evts )
    {
        addEventListener( evt, callback );
    }
}

그런 다음 그렇게 일상이라고 부를 수 있습니다.

var evts:Array = [ FormEvent.SHOW_FORM, FormEvent.SEND_FORM, FormEvent.CANCEL_FORM ];
addMultipleEventListeners( evts, formListener );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top