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 :

Probleme passage de paramètres à EventListener dans boucle for


Sujet :

ActionScript 3

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Probleme passage de paramètres à EventListener dans boucle for
    Bonjour,
    je souhaiterais pouvoir créer dynamiquement des linkButtons à partir d'un ensemble d'objets persos contenus dans un ArrayCollection, et ceci dans le but de gérer un calendrier (je simplifie mon code ici en ne gardant que l'essentiel).
    Pour cela, à chaque LinkButton que je crée à partir de chacun de mes objets, je souhaite ajouter un EventListener. Je souhaite ensuite récupérer, dans la méthode associée à l'événement, les attributs de mon objet en cours.
    Mon problème ici est que l'instance d'objet que je récupère est toujours la dernière de la boucle.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for each(var obj:Object in myArrayCollection){
    <div style="margin-left:40px">var lbutton:LinkButton = new LinkButton();
    lbutton.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void{
    <div style="margin-left:40px">clickLButtonListener(e, obj);</div>});</div>}
     
    private function clickLButtonListener(event:MouseEvent, obj:Object):void{
    <div style="margin-left:40px">Alert.show(obj.libelle);</div>}
    L'exemple est simplifié, je sais qu'on pourrait affecter le libellé de l'objet au label du linkbutton directement, mais c'est juste pour l'exemple.
    Ici mon problème c'est que le label de tous mes linkbuttons est le même : c'est le libellé du dernier objet parcouru dans la boucle.

    Tout fonctionne bien si je passe par l'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for each(var obj:Object in myArrayCollection){
    <div style="margin-left:40px">var lbutton:LinkButton = new LinkButton();
    lbutton.label = obj.libelle;
    lbutton.addEventListener(MouseEvent.CLICK, clickLButtonListener);</div>}
     
    private function clickLButtonListener(event:MouseEvent):void{
    <div style="margin-left:40px">Alert.show(LinkButton(event.currentTarget).label);</div>}
    mais ce n'est pas ce que je souhaite faire. Je voudrais récupérer tous les attributs de mon objet dans ma méthode 'clickLButtonListener' (pas seulement le libellé, il y en a d'autre);

    J'ai essayé en créant une nouvelle instance pour chaque objet dans ma boucle, et de la passer au listener, plutot que l'objet directement, mais ca ne change rien au problème.

    Quelqu'un aurait-il une solution pour moi svp?

  2. #2
    Membre habitué
    Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Points : 176
    Points
    176
    Par défaut
    Je ne sais pas exactement ce que tu cherches à récupérer dans LinkButton, mais j'imagine que le label est unique à chacun. Où précises-tu le contenu de label? Il faut que ce soit dans la boucle, sinon, effectivement, les instances sont écrasé, et tu perd n'accède qu'à 1 seul objet au lieu de X.

    Sors ton écouteur de la boucle, et n'écoute pas en particulier sur un objet. De plus, passer obj en paramètre est inutile puisque MouseEvent te propose target ou currentTarget dans ses propriétés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for each(var obj:Object in myArrayCollection){
     
    <div style="margin-left:40px">var lbutton:LinkButton = new LinkButton(); 
    lbutton.label = obj.libelle;</div>}
    //je sors l'écouteur pour qu'il écoute le click en général
    addEventListener(MouseEvent.CLICK, clickLButtonListener); 
     
    private function clickLButtonListener(event:MouseEvent):void{
     
        trace((event.target as LinkButton).label);
     
    }
    Je ne connais pas Alert(). c'est du javascript plutôt non?

Discussions similaires

  1. Probleme affectation onRollOver/onRollOut dans boucle for
    Par Kahlyv dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 18/01/2010, 16h16
  2. PB : Requête Paramétrée dans boucle For
    Par papy75 dans le forum Accès aux données
    Réponses: 5
    Dernier message: 08/05/2008, 11h35
  3. Réponses: 3
    Dernier message: 04/08/2006, 19h24
  4. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31
  5. [JLabel] JLabel dans boucle for
    Par clairenes dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/01/2006, 00h47

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