Salut,
Je souhaite ajouter des handlers d'évènements lors d'une boucle :
1 2 3 4 5 6 7 8
| for(var i:int=0; i < 10; i++) {
var image:Image = new Image();
image.addEventListener(MouseEvent.CLICK,
function():void {
imageClicked(i);
}
);
} |
Le problème, c'est que le i utilisé est dans une closure, et donc qu'il partage le "scope" de la boucle : c'est le même i.
Ainsi, quelque soit l'image (de la 1ère à la 10e), l'évènement appellera imageClicked(10) (car à la fin i vaudra 10).
J'ai donc pensé à utiliser une variable qui elle, ne change pas :
1 2 3 4 5 6 7 8 9
| for(var i:int=0; i < 10; i++) {
var image:Image = new Image();
var constantIndex = i;
image.addEventListener(MouseEvent.CLICK,
function():void {
imageClicked(constantIndex);
}
);
} |
Mais apparemment, il utilise le même emplacement de variable "constantIndex" pour les 10 tours de boucle, même s'il est utilisé dans une fonction (car constantIndex vaut 10 quelque soit l'image également).
J'ai égament tenté de déclarer cette variable final, comme on ferait en java, mais il ne veut pas de "final" pour une variable...
J'ai tenté également de la déclarer :
var constantIndex:int = new int(i);
pour forcer la recopie, au cas où cela viendrait d'une affectation par adresse et non par valeur, rien n'y fait...
Comment faire ?
Partager