|
Page 1 sur 3 Dans le premier tutorial Flash Remoting nous avons vu comment appeler une méthode de service distant et comment récupérer le résultat de cette méthode.
Pour l'appeler, nous avons créé un objet Flash lié au service distant: NetServices.setDefaultGatewayURL ("http://www.flashxpress.net/r_flash/f_remoting/remot_intro/echanges/passerelle.php"); connexion=NetServices.createGatewayConnection(); reception={}; echanges=connexion.getService("echanges",reception); et déclenché les méthodes distantes en les appelant par leur nom et en leur transmettant les paramètres qu'elles attendaient: echanges.transmission(envoi); Les paramètres que nous avons transmis ont été reçu par la méthode distante sous la même forme que celle des paramètres transmis. Si envoi ici est un objet de type Array, la méthode distante recevra un objet équivalent dans son langage. Nous avons aussi créé un objet pour gérer la réception (ici nous l'avons appelé reception). Les retours du serveur déclenchent côté flash une fonction de rappel (callback) qui possède le même nom que la méthode appelée avec le suffixe "_result" en plus. Cette nouvelle méthode doit appartenir à l'objet déterminé comme objet récepteur: reception.transmission_result=function (pValeur) { ... } Le paramètre pValeur de la méthode de retour est de même type que celui transmis par le serveur. Si le serveur a renvoyé un nombre, Flash recevra un objet de type Number. Dans le cas où vous ne définissez pas de méthode de rappel _result, Flash déclenche un événement onResult directement au sein de l'objet de réception. Pour faire le test, remplacez reception.transmission_result par reception.onResult, vous devriez obtenir les mêmes résultats. L'événement onResult est déclenché pour toutes les méthodes distantes qui n'ont pas, côté flash, de méthode _result définie. Nous pouvons donc profiter de ce comportement pour gérer un certain nombre de retour précisément et d'autres par l'intermédiaire d'un événement général: Considérons que nous disposons de trois méthodes de service distant "methodeA", "methodeB", "methodeC". Nous allons gérer précisément le retour de "methodeA" et traiter indifféremment le retour de "méthodeB" et "méthodeC": reception.methodeA_result=function (pValeur) { // code à exécuter au retour de la méthode methodeA } reception.onResult=function (pValeur) { } btn1.onRelease=function () { echanges.methodeA("trop fort :)"); } btn2.onRelease=function () { echanges.methodeB(10,20,true,"héhé"); } btn3.onRelease=function () { echanges.methodeC(["bob","cowboy_bill"]); } Remarque: Vous constaterez dans le fichier de service echanges2.php, la transmission parfaite des caractères +, %, é, à, ë qui doivent normalement être correctement encodés (via UTF8_encode et pour % et +, urlencode). Vous n'avez donc pas besoin de vous préoccuper de l'encodage côté serveur quand vous utilisez Flash Remoting. Jusque la nous avons défini un objet de réception pour un service, cette objet sera capable de recevoir l'ensemble des retour des méthodes distantes. Il est également possible de créer un objet de réception par méthode distante appelée, c'est ce que nous allons étudier maintenant. Un objet par méthode distante: Vous pouvez tout a fait définir un "objet de retour" par méthode distante plutôt que pour un service entier. Pour cela, il suffit de spécifier précisément à chaque appel de méthode quel objet de retour vous utilisez. Attention dans ce cas, il faut également ne pas définir d'objet par défaut dans la méthode getService. Dans le cas ou vous choisissez de définir un seul objet de retour par méthode vous pouvez directement exploiter l'évènement onResult plutôt que définir des méthodes de retour _result. Maintenant si vous utilisez un même objet pour plusieurs méthodes, vous serez peut être amené à définir des méthodes de retour _result. Exemple avec un objet de retour par méthode distante: NetServices.setDefaultGatewayURL ("http://www.flashxpress.net/r_flash/f_remoting/remot_intro/echanges/passerelle.php"); connexion=NetServices.createGatewayConnection(); echanges=connexion.getService("echanges"); retour1={}; retour2={}; retour3={}; retour1.onResult=function(pValeur) { } retour2.onResult=function(pValeur) { } retour3.onResult=function(pValeur) { } echanges.methodeA(retour1,"trop fort :)"); echanges.methodeB(retour2,10,20,true,"héhé"); echanges.methodeC(retour3,["bob","cowboy_bill"]); En Conclusion, à vous de choisir votre syntaxe, personnellement je préfère la deuxième solution avec des événements onResult qui me paraissent syntaxiquement plus proches du processus classique de flash (gestionnaire d'événements) mais chaque technique a ses avantages et inconvénients.
|