2011-05-27 2 views
1

Heres le code:Comment implémenter RemoteObject dans une classe étrangère?

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 
} 

Malheureusement, sa ne marche pas atteindre la eventHandler, lorsque i appeler la fonction loadCurrentSchem(). Qu'est-ce qui ne va pas?

Voilà comment j'appelle la classe:

<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> 

Il.

+0

Etes-vous sûr que votre système d'extrémité est touché? –

+0

Oui, je suis. Pour deux raisons. Premièrement: Ce code fonctionne parfaitement dans l'application script-tag, et ensuite: La console BlazeDS compte un appel réussi. – Kai

+0

Avez-vous essayé de vous abonner à l'événement 'fault'? Peut-être que le gestionnaire de résultat n'invoque pas en raison d'une erreur que vous n'écoutez pas du tout? – Constantiner

Répondre

0

Le problème est que vous n'avez pas vérifié que le gestionnaire de résultats était correctement appelé. La chose est que lorsque vous utilisez:

textfeld.text = schem.info; 

vous avez défini la valeur de:

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

comme un texte du champ de texte et cette valeur ne change pas dans un gestionnaire de résultat.

Vous pouvez résoudre ce problème au moins deux façons:

  • Prolongez votre Schem classe de EventDispatcher et le lieu des événements il y a des métadonnées.

La classe:

[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 
} 

Ensuite, dans votre classe 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> 
  • La deuxième méthode consiste à utiliser de liaison de données.

Schem Classe:

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 
} 

Et 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}" /> 

Hope this helps! :)

+0

Cela a vraiment aidé. En utilisant votre méthode, j'ai découvert que ma classe est très fonctionnelle et que le problème est de transmettre les résultats à d'autres classes. Je vais essayer une approche différente pour le faire. (Contraignant) – Kai

Questions connexes