2009-11-12 7 views
0

Je dois renvoyer la valeur de mon objet Responder. En ce moment, j'ai:Retour à partir de Flex/ActionScript 3 Objets répondeur

private function pro():int { 
    gateway.connect('http://10.0.2.2:5000/gateway'); 
    var id:int = 0; 
    function ret_pr(result:*):int { 
     return result 
    } 
    var responder:Responder = new Responder(ret_pr); 
    gateway.call('sx.xj', responder); 
    return id 
} 

Fondamentalement, je dois savoir comment obtenir la valeur de retour de ret_pr en identifiant ou quoi que ce soit que je reviens de cette fonction. Le répondant semble juste le manger. Je ne peux pas utiliser une variable publique ailleurs, car celle-ci sera exécutée plusieurs fois à la fois, donc j'ai besoin d'une portée locale.

Répondre

2

Voici comment j'écrire une connexion au serveur AMF, l'appeler et stocker la valeur résultante. Rappelez-vous que le résultat ne sera pas disponible instantanément, donc vous configurerez le répondeur pour qu'il «réponde» aux données lorsqu'il reviendra du serveur.

public function init():void 
{ 
    connection = new NetConnection(); 
    connection.connect('http://10.0.2.2:5000/gateway'); 
    setSessionID(1); 
} 
public function setSessionID(user_id:String):void 
{ 
    var amfResponder:Responder = new Responder(setSessionIDResult, onFault); 
    connection.call("ServerService.setSessionID", amfResponder , user_id); 
} 

private function setSessionIDResult(result:Object):void { 
    id = result.id; 
    // here you'd do something to notify that the data has been downloaded. I'll usually 
    // use a custom Event class that just notifies that the data is ready,but I'd store 
    // it here in the class with the AMF call to keep all my data in one place. 
} 
private function onFault(fault:Object):void { 
    trace("AMFPHP error: "+fault); 
} 

J'espère que cela peut vous orienter dans la bonne direction.

0
private function pro():int { 
    gateway.connect('http://10.0.2.2:5000/gateway'); 
    var id:int = 0; 
    function ret_pr(result:*):int { 
     return result 
    } 
    var responder:Responder = new Responder(ret_pr); 
    gateway.call('sx.xj', responder); 
    return id 
} 

Ce code n'obtiendra jamais ce que vous voulez. Vous devez utiliser une fonction de résultat appropriée. La valeur de retour du répondeur de fonction anonyme ne sera pas utilisée par la fonction environnante. Il retournera toujours 0 dans ce cas. Vous avez affaire à un appel asynchrone ici, et votre logique doit gérer cela en conséquence.

private function pro():void { 
    gateway.connect('http://10.0.2.2:5000/gateway'); 
    var responder:Responder = new Responder(handleResponse); 
    gateway.call('sx.xj', responder); 
} 

private function handleResponse(result:*):void 
{ 
    var event:MyCustomNotificationEvent = new MyCustomNotificationEvent( 
      MyCustomNotificationEvent.RESULTS_RECEIVED, result); 
    dispatchEvent(event); 
    //a listener responds to this and does work on your result 
    //or maybe here you add the result to an array, or some other 
    //mechanism 
} 

Le point qu'il y ait ne va pas utiliser les fonctions de Anon/fermetures pour vous donner une sorte de comportement pseudo-syncronous.

Questions connexes