Как реализовать RemoteObject в чужом классе? - PullRequest
1 голос
/ 27 мая 2011

Вот код:

public class Schem
{
    public var info:String="";      

    public function Schem()
    {
    }

    public function loadCurrentSchem():void
    {
        var ro:RemoteObject = new RemoteObject("Hibernatetest");
        ro.endpoint = "http://Jesus/blazeds/messagebroker/amf";
        ro.addEventListener(ResultEvent.RESULT,onResult);
        ro.getCells();
        info = info + "Loader called ... \n";




    }

    public function onResult(event:ResultEvent):void
    {
        var array:ArrayCollection = event.result as ArrayCollection;
        info = info + "Schemlength = " + String(array.length)+ "\n";
    }


    private function onFault(event:FaultEvent):void
    {
        info = info + "Errorhandler Called";
    }
    //Eventhandlers


    //Getters, Setters
}

К сожалению, он не достигает eventHandler, когда я вызываю функцию loadCurrentSchem ().Что не так?

Вот как я называю класс:

<fx:Script>
    <![CDATA[
        import argoseye.main.Golem;
        import argoseye.main.Schem;

        import mx.collections.ArrayCollection;
        import mx.rpc.AsyncToken;
        import mx.rpc.Responder;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.remoting.RemoteObject;

        protected function button1_clickHandler(event:MouseEvent):void
        {
            var schem:Schem = new Schem();
            schem.loadCurrentSchem();
            textfeld.text = schem.info;
        }

    ]]>
</fx:Script>

Там.

1 Ответ

0 голосов
/ 27 мая 2011

Проблема в том, что вы не убедились в правильности вызова обработчика результатов. Дело в том, что при использовании:

textfeld.text = schem.info;

вы установили значение:

info = info + "Loader called ... \n";

как текст текстового поля, и это значение не изменяется в обработчике результатов.

Вы можете решить эту проблему как минимум двумя способами:

  • Расширьте свой класс Schem из EventDispatcher и поместите туда метаданные событий.

Класс:

[Event(name="result", type="mx.rpc.events.ResultEvent")]
[Event(name="fault", type="mx.rpc.events.FaultEvent")]
public class Schem extends EventDispatcher
{
    public var info:String="";      

    public function Schem()
    {
    }

    public function loadCurrentSchem():void
    {
        var ro:RemoteObject = new RemoteObject("Hibernatetest");
        ro.endpoint = "http://Jesus/blazeds/messagebroker/amf";
        ro.addEventListener(ResultEvent.RESULT,onResult);
        ro.addEventListener(FaultEvent.FAULT,onFault);
        ro.getCells();
        info += "Loader called ... \n";




    }

    private function onResult(event:ResultEvent):void
    {
        var array:ArrayCollection = event.result as ArrayCollection;
        info += "Schemlength = " + String(array.length)+ "\n";
        dispatchEvent(event);
    }


    private function onFault(event:FaultEvent):void
    {
        info += "Errorhandler Called";
        dispatchEvent(event);
    }
    //Eventhandlers


    //Getters, Setters
}

Тогда в вашем классе MXML:

<fx:Script>
    <![CDATA[
        import argoseye.main.Golem;
        import argoseye.main.Schem;

        import mx.collections.ArrayCollection;
        import mx.rpc.AsyncToken;
        import mx.rpc.Responder;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.remoting.RemoteObject;

        protected function button1_clickHandler(event:MouseEvent):void
        {
            var schem:Schem = new Schem();
            schem.addEventListener(ResultEvent.RESULT,onResult);
            schem.addEventListener(FaultEvent.FAULT,onFault);
            schem.loadCurrentSchem();
            textfeld.text = schem.info;

        }

    private function onResult(event:ResultEvent):void
    {
        textfeld.text = event.currentTarget.info;
    }

    private function onFault(event:FaultEvent):void
    {
        textfeld.text = event.currentTarget.info;
    }
    ]]>
</fx:Script>
  • Второй способ - использовать привязку данных.

Schem класс:

public class Schem
{
    [Bindable]
    public var info:String="";      

    public function Schem()
    {
    }

    public function loadCurrentSchem():void
    {
        var ro:RemoteObject = new RemoteObject("Hibernatetest");
        ro.endpoint = "http://Jesus/blazeds/messagebroker/amf";
        ro.addEventListener(ResultEvent.RESULT,onResult);
        ro.addEventListener(FaultEvent.FAULT,onFault);
        ro.getCells();
        info += "Loader called ... \n";
    }

    private function onResult(event:ResultEvent):void
    {
        var array:ArrayCollection = event.result as ArrayCollection;
        info += "Schemlength = " + String(array.length)+ "\n";
    }


    private function onFault(event:FaultEvent):void
    {
        info += "Errorhandler Called";
    }
    //Eventhandlers


    //Getters, Setters
}

и в MXML:

<fx:Script>
    <![CDATA[
        import argoseye.main.Golem;
        import argoseye.main.Schem;

        import mx.collections.ArrayCollection;
        import mx.rpc.AsyncToken;
        import mx.rpc.Responder;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.remoting.RemoteObject;

        [Bindable]
        private var schem:Schem;

        protected function button1_clickHandler(event:MouseEvent):void
        {
            schem = new Schem();
            schem.loadCurrentSchem();
        }

    ]]>
</fx:Script>
<s:Label id="textfeld" text="{schem.info}" />

Надеюсь, это поможет! :)

...