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 :
- for each(var obj:Object in myArrayCollection){
- var lbutton:LinkButton = new LinkButton();
- lbutton.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void{
- clickLButtonListener(e, obj);
- });
- }
- private function clickLButtonListener(event:MouseEvent, obj:Object){
- event.currentTarget.label = obj.libelle;
- }
|
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 :
- for each(var obj:Object in myArrayCollection){
- var lbutton:LinkButton = new LinkButton();
- lbutton.label = obj.libelle;
- lbutton.addEventListener(MouseEvent.CLICK, clickLButtonListener);
- }
- private function clickLButtonListener(event:MouseEvent){
- event.currentTarget.label = LinkButton(event.currentTarget).label;
- }
|
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?