Как отправить пользовательское событие в событие результата httpservice - PullRequest
1 голос
/ 08 декабря 2011

В своем приложении AIR я пытаюсь отправить пользовательское событие из класса в главное окно. Этот класс используется для вызова httpservice. Моя цель - отправить пользовательское окно при отправке результата httpservice.

package fr.inter.DataProvider
{
    import flash.events.Event;
    import flash.events.EventDispatcher;

    import fr.inter.config.urlManager;
    import fr.kapit.introspection.components.DisplayListComponent;

    import mx.collections.XMLListCollection;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;

    [Event(name="evtPatSelect", type="flash.events.Event")]

    public class sPatient
    {

        private var _phppaIndex:String;
        private var _phppaNomU:String;
        private var _phppaPrenom:String;
        private var phpSearchPatNom:HTTPService;


        public function sPatient()
        {

        }


        public function sPhpSearchPat(p:Object):void
        {

            phpSearchPatNom = new HTTPService();
            phpSearchPatNom.method="POST";
            phpSearchPatNom.resultFormat = "e4x";
            phpSearchPatNom.addEventListener(ResultEvent.RESULT,resultListePatient);
            phpSearchPatNom.addEventListener(FaultEvent.FAULT,serviceFault);
            var urlPhp:urlManager=new urlManager();
            phpSearchPatNom.url = urlPhp.urlService() + "20SearchNom.php";
            phpSearchPatNom.send(p);
        }


        private function resultListePatient( event:ResultEvent ):void
        {

            var xmlList:XMLList = XML(event.result).patientPHP;
            var xmlListColl = new XMLListCollection(xmlList);


            if(xmlListColl.length==1)
            {

                _phppaIndex = xmlListColl.getItemAt(0).paIndex;
                _phppaNomU = xmlListColl.getItemAt(0).paNomU;
                _phppaPrenom = xmlListColl.getItemAt(0).paPrenom;

                var evtPat:Event = new Event("evtPatSelect");

                var evdips:EventDispatcher = new EventDispatcher();
                evdips.dispatchEvent(evtPat);

            }
        }



        private function serviceFault( event:FaultEvent )
        {
            trace( event.fault.message );
        }

        public function get phppaIndex():String
        {
            return _phppaIndex;
        }

        public function set phppaIndex(value:String):void
        {
            _phppaIndex = value;
        }

        public function get phppaNomU():String
        {
            return _phppaNomU;
        }

        public function set phppaNomU(value:String):void
        {
            _phppaNomU = value;
        }

        public function get phppaPrenom():String
        {
            return _phppaPrenom;
        }

        public function set phppaPrenom(value:String):void
        {
            _phppaPrenom = value;
        }


    }
}

В главном окне я добавил EventListener, но, похоже, это не работает. Вы можете помочь мне решить это?

Спасибо

1 Ответ

0 голосов
/ 08 декабря 2011

Сначала расширьте класс sPatient как EventDispatcher

public class sPatient extends EventDispatcher {

Затем создайте класс для своего пользовательского события

public class MyCustomEvent extends Event {
        public static const CUSTOM_TITLE:String = "custom_title";
        public var eventData:Object;

        public function CustomEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, data:Object = null) {
            super(type, bubbles, cancelable);
            if(data != null) eventData = data;
        }

        public override function clone():Event {
            return new CustomEvent(type, bubbles, cancelable);
        }

        public override function toString():String {
            return formatToString("CustomEvent", "type", "bubbles", "cancelable", "eventPhase");
        }
    }

Тогда в вашем классе sPatient, перейдите:

this.dispatchEvent(new MyCustomEvent(MyCustomEvent.CUSTOM_TITLE));

И слушай, как это так

sPatientInstance.addEventListener(MyCustomEvent.CUSTOM_TITLE,functionHandler);
...