Recommencer à zéro le parcours d'une liste [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
23 avril 2009
-
Messages postés
3
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
23 avril 2009
-
Salut,

J'ai une variable global Controls contenant 4 éléments :

    var Controls = {
          draw: new OpenLayers.Control.DrawFeature(vectors,
                              OpenLayers.Handler.Polygon,{drawFeature: addFeature}),
          drag: new OpenLayers.Control.DragFeature(vectors),
          modify: new OpenLayers.Control.ModifyFeature(vectors),
          select: new OpenLayers.Control.SelectFeature(vectors,
                     {onSelect : removeFeature
            })
        };   

Dans une fonction js je parcours cette variable pour afficher chaque icône :

    function addDrawControl() {
        for (var key in Controls){
            drawPanel.addControls (Controls[key]);
        };
        drawPanel.redraw();   
    };

Le pb, c'est que je veux parcourir plusieurs fois cette liste.
La première fois, ça marche nickel. La deuxième, ça ne marche plus : en effet, la variable key a déjà parcouru tous les éléments de Controls. La fonction considère qu'il n'y a plus d'éléments dans Controls.

Je voudrais savoir comment lui dire de recommencer au début, de reparcourir la liste Controls depuis le début...

Merci

4 réponses

Messages postés
3
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
23 avril 2009

Oups !

En fait le pb ne vient du fait qu'il ne reparcourt pas Controls : après quelques tests, ça, ça marche.
Le pb vient de addControls. Ils sont sûrement pas supprimer comme il faut avant d'être recréer.

Donc, le pb, c'est pas du javascript, mais la gestion des fonctions d'OpenLayers.

Merci Orange73 !
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

fonction récursive

function addDrawControl() {
        for (var key in Controls){
            drawPanel.addControls (Controls[key]);
        };
        drawPanel.redraw();   
         addDrawControl();
    };

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
3
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
23 avril 2009

Salut,

Euh ... non, le pb n'est pas dans le fait de l'appeler plusieurs fois.

Au 1er passage dans la fonction, il parcourt la liste Controls (sans pb). Lorsque je rappelle cette fonction une seconde fois, il ne parcourt plus cette liste : il garde en mémoire sa position à la fin du 1er passage, c'est-à-dire la fin de la liste. Il ne lit donc plus rien dans Controls la seconde fois, puisqu'il n'y a plus de 'key' dans 'Controls'.

Il faudrait une fonction qui lui dise de recommencer au début, une sorte de reset, pour lui faire "oublier" le fait qu'il est déjà parcouru Controls.

Merci
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Et si tu fais sa :

function addDrawControl() {
       var key = null; // ou 0
        for (key in Controls){
            drawPanel.addControls (Controls[key]);
        };
        drawPanel.redraw();   
    };

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)