IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Portée variables avec HTTPService addEventListener


Sujet :

ActionScript 3

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut Portée variables avec HTTPService addEventListener
    Bonjour à tous !

    Je réalise une application qui utilise HTTPService. A mon objet HTTPService, j'associe des Listeners qui réagiront en fonction du résultat de l'appel à la méthode send()... Jusque là tout va bien. Mon problème est que j'aurais aimé pouvoir modifier une variable à l'intérieur de ces handlers et pouvoir la récupérer en dehors des handler. Un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public function test() : int {
    var service HTTPService() = new HTTPService();
    var returnValue:int;
    ...
    service.addEventListener(FaultEvent.FAULT, function(event:FaultEvent):void {
    				returnValue = -1;
    			})      
     
    service.addEventListener(ResultEvent.RESULT, function(event:ResultEvent):void {
    				returnValue = 0;
    			}) 
     
    service.send();
     
    return returnValue;
    }
    Avec l'exemple ci-dessus, imaginons que j'initialise ma variable returnValue au moment de sa déclaration, c'est cette valeur d'initialisation qui sera retournée par la fonction test(), et pas celle modifiée dans les handlers...

    Je suppose que c'est un comportement normal mais auriez vous une idée pour réaliser ça d'une autre manière?

    Merci d'avance !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Oui c'est un comportement normal, l'appel à tes services étant asynchrones (et tu n'as pas le choix, il n'y a que de l'asynchrone en flex).
    C'est un peu pénible parfois. Faut s'y faire.
    Mais les mécanismes de binding aident à s'en sortir.

    Que veux-tu faire du résultat ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut
    Merci pour ta réponse ! Je me doutais en effet que c'était le comportement normal...

    En fait j'aimerais simplement renvoyer un array rempli avec certaines valeurs si le send se passe correctement et renvoyer un array null sinon.

    Une idée sur la manière de faire ça?

    Merci !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Ok mais que veux-tu en faire de ton array ?
    Tu vas l'exploiter quelquepart pour en afficher le contenu peut-être ?

    L'idée dans ce cas c'est de déclarer une variable [Bindable] et de brancher ton composant graphique dessus.
    Sur retour de ton appel asynchrone, cette variable sera mise à jour, et ton affichage se synchronisera tout seul.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut
    Oui c'est ça, je l'utilise pour remplir un datagrid. Le problème c'est que ma variable "bindée" se trouve dans le fichier de mon composant et ma classe (avec fonction test de l'exemple) dans un fichier AS séparé...

    Est-ce qu'il y a moyen de faire un bind de cette manière ou pas ? Est-ce que dans ce cas particulier je suis obligé de mettre mon code AS dans mon composant ?

    Merci !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Ben là y a deux possibilités je pense (ou plus peut-être)

    1 - Ta vue gère elle-même son contenu.
    Dans ce cas, il te suffit de mettre l'appel à ton service distant dans une fonction d'init de ta vue.

    2 - Ta classe as (type controlleur) gère la vue et a donc une référence vers cette vue.
    Dans ce cas, tu ajoutes, depuis ta classe as un listener sur le creationCompolete de ta vue. Dans le déclenchement de l'évenement, tu fais l'appel à ton service distant et sur retour de ce service distant tu fais un truc genre taVue.tavariable = event.result as ListCollectionView. Dans ta vue tu auras préalablement bindé ton datagrid sur le membre de classe [bindable] tavariable.

    Charles.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Une troisième possibilité serait que tes deux classes n'aies pas de lien direct.
    Dans ce cas, il te faut une variable 'globale' à un niveau supérieur (application).

    Tu bindes ton datagrid sur cette variable (accessible via Application.) et tu mets à jour cette variable sur retour d'appel à ton service qui sera fait depuis un autre point d'entrée.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut
    Il me semble que je devrais pouvoir trouver mon bonheur parmi ces possibilités ;-)

    Un tout grand merci pour ton aide !

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Je t'en prie. Oublie pas le tag résolu si tu t'en es sorti.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Portée de variables avec require_once
    Par aertys dans le forum Langage
    Réponses: 5
    Dernier message: 01/10/2014, 20h28
  2. variable avec portée sur fiche
    Par looping dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2013, 20h48
  3. port 80 avec Apache
    Par SuperDog dans le forum Apache
    Réponses: 5
    Dernier message: 08/07/2004, 17h28
  4. Ports forwarding avec iptables
    Par Iced Earth dans le forum Réseau
    Réponses: 6
    Dernier message: 19/11/2002, 21h24
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo