Bonjour à tous,
Je vous expose mon problème ( qui me rend dingue depuis quelques temps déjà ). J'ai créé une classe Js , pour la gestion des cartes google maps GMapAnnu ( et c'est la première fois que je créé une classe en JS).
Ma classe à une fonction createMap qui créé la carte à partir de paramétres se trouvant dans un fichier XML. j'utilise une fonction loadAnnuaire pour "remplir" la variable activites qui est supposé être globale , après j'appel cette variable avec ma fonction afficheEntite mais la variable est "undefined" .

Voilà mon code mais si vous êtes une âme charitable et que vous voulez m'aider, interessez vous surtout à la variable activites qui est :
  • déclarée au début comme variable globale et privée de la fonction GMapAnnu
  • remplie à l'interieure de la fonction privée loadAnnuaire qui elle est appellé à partir de la fonction publique this.createMap
  • enfin appelé à partir de la fonction publique this.afficheEntite et c'est là ou j'ai l'erreure undefined

    Voile le code et merci à l'avance :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
     
    function GMapAnnu() {
        var mapLocation;
        var map;
        var activites = new Array();
        var myIcons = new Array();
        var custIcon = new GIcon(G_DEFAULT_ICON);
        custIcon.iconSize = new GSize(16, 25);
        custIcon.shadowSize = new GSize(0, 0);
        custIcon.iconAnchor = new GPoint(0, 0);
     
        this.createMap = function(mLocation) {
     
            mapLocation = mLocation;
            map = new GMap2(document.getElementById(mapLocation));
     
            GDownloadUrl("viewer/data.xml",
            function(data) {
     
                var xml = GXml.parse(data);
     
                var annuaire_xml = xml.documentElement.getElementsByTagName("annuaire");
     
                loadAnnuaire(annuaire_xml[0]);
     
                // Recuperer les entites : 
                var entites_xml = xml.documentElement.getElementsByTagName("entites");
                // Charger les entites à partir de l'xml dans un tableau associatif. 
                loadEntites(entites_xml[0]);
     
                //alert("Lat : "+ marker.getLatLng().x.toString() + " Lng : "+ marker.getLatLng().y.toString());
            });
     
        }
     
        function loadAnnuaire(annuaire) {
     
            // Positionner la carte.  //latNe_annu="36.842950" lngNe_annu="10.251403" latSw="36.829321" lngSw="10.225353"
            // Creer le point NordEst. 
            var ne = new GLatLng(parseFloat(annuaire.getAttribute("latNe_annu")), parseFloat(annuaire.getAttribute("lngNe_annu")));
            // Creer le point SudWest
            var sw = new GLatLng(parseFloat(annuaire.getAttribute("latSw_annu")), parseFloat(annuaire.getAttribute("lngSw_annu")));
     
            // Creer le bound de la carte , un bound est un carrée crée grace aux points extreme nordEst et sudWest .
            var bounds = new GLatLngBounds(sw, ne);
            // Centrer et zoomer sur la position suivant 
            map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     
            /*****    Charger les controles et le type de la carte   ******/
            // Le type de la carte 
            switch (annuaire.getAttribute("maptype_annu")) {
            case "G_NORMAL_MAP":
                map.setMapType(G_NORMAL_MAP);
                break;
            case "G_SATELLITE_MAP":
                map.setMapType(G_SATELLITE_MAP);
                break;
            case "G_HYBRID_MAP":
                map.setMapType(G_HYBRID_MAP);
                break;
            case "G_PHYSICAL_MAP":
                map.setMapType(G_PHYSICIAL_MAP);
                break;
            }
     
            // le Control de la carte Zoom/Size
            switch (annuaire.getAttribute("mapcontrol_annu")) {
            case "GSmallMapControl":
                map.addControl(new GSmallMapControl());
                break;
            case "GLargeMapControl":
                map.addControl(new GLargeMapControl());
                break;
            case "GSmallZoomControl":
                map.addControl(new GSmallZoomControl());
                break;
            case "GLargeMapControl3D":
                map.addControl(new GLargeMapControl3D());
                break;
            }
     
            // le control du type de la carte. 
            switch (annuaire.getAttribute("maptypecontrol_annu")) {
            case "GMapTypeControl":
                map.addControl(new GMapTypeControl());
                break;
            case "GMapTypeControl(True)":
                map.addControl(new GMapTypeControl(true));
                break;
            case "GMenuMapTypeControl":
                map.addControl(new GMenuMapTypeControl());
                break;
            }
     
            // le control de l'echelle de la carte mapscalecontrol. 
            if (annuaire.getAttribute("mapscalecontrol_annu") == "GScaleControl") map.addControl(new GScaleControl());
     
            // le control de l'apercçu , mapoverview
            if (annuaire.getAttribute("mapoverviewcontrol_annu") == "GOverviewMapControl") map.addControl(new GOverviewMapControl());
     
        }
     
        function loadEntites(entites_xml) {
     
            // Recuperer dans un tableau la liste des activites. 
            var activites_xml = entites_xml.getElementsByTagName("activite");
     
            for (var i = 0; i < activites_xml.length; i++) {
                // Ajouter un enregistrement a activites ayant pour id , l'id de l'activite. 
                var id_activ = activites_xml[i].getAttribute("id_activ").toString();
                activites[id_activ] = new Array();
     
                // Ajouter les autres propriété de l'activite a l'enregistrement ayant pour clé l'id de l'activite. 
                activites[id_activ]["nom_activ"] = activites_xml[i].getAttribute("nom_activ").toString();
                activites[id_activ]["desc_activ"] = activites_xml[i].getAttribute("desc_activ").toString();
     
                // Inserer les categories d'une activites. 
                activites[id_activ]["categories"] = new Array();
                // recuperer la liste des categories dans une variable categories_xml puis parcourir ce tableau. . 
                var categories_xml = activites_xml[i].getElementsByTagName("categorie");
     
                for (var j = 0; j < categories_xml.length; j++) {
                    var id_cat = categories_xml[j].getAttribute("id_cat").toString();
                    activites[id_activ].categories[id_cat] = new Array();
     
                    activites[id_activ].categories[id_cat]["nom_cat"] = categories_xml[j].getAttribute("nom_cat").toString();
                    activites[id_activ].categories[id_cat]["desc_cat"] = categories_xml[j].getAttribute("desc_cat").toString();
                    activites[id_activ].categories[id_cat]["icone_cat"] = categories_xml[j].getAttribute("icone_cat").toString();
     
                    // Ajouter une icone de cette categorie au tableau d'icones. 
                    myIcons[id_cat] = new GIcon(custIcon, "img/gicons/" + activites[id_activ].categories[id_cat]["icone_cat"]);
                    //
                    activites[id_activ].categories[id_cat].entites = new Array();
     
                    var entites_xml = categories_xml[j].getElementsByTagName("entite");
     
                    for (var k = 0; k < entites_xml.length; k++) {
                        var id_ent = entites_xml[k].getAttribute("id_ent").toString();
                        var nom_ent = entites_xml[k].getAttribute("nom_ent").toString();
                        var desc_ent = entites_xml[k].getAttribute("desc_ent").toString();
                        var lng_ent = parseFloat(entites_xml[k].getAttribute("lng_ent"));
                        var lat_ent = parseFloat(entites_xml[k].getAttribute("lat_ent"));
                        var adr_ent = entites_xml[k].getAttribute("adr_ent").toString();
                        var tel_ent = entites_xml[k].getAttribute("tel_ent").toString();
                        var web_ent = entites_xml[k].getAttribute("web_ent").toString();
                        var rue_ent = entites_xml[k].getAttribute("rue_ent").toString();
     
                        var marker = new GMarker(new GLatLng(lat_ent, lng_ent), {
                            icon: myIcons[id_cat]
                        });
                        alert(nom_ent + " " + lat_ent.toString() + " " + lng_ent.toString());
     
                        // Ajouter les informations au marqueur. 
                        marker.nom_ent = nom_ent;
                        marker.desc_ent = desc_ent;
                        marker.adr_ent = adr_ent;
                        marker.tel_ent = tel_ent;
                        marker.web_ent = web_ent;
                        marker.rue_ent = rue_ent;
     
                        activites[id_activ].categories[id_cat].entites[id_ent] = marker;
                    }
     
                }
     
            }
     
        }
     
        this.afficheEntite = function(id_ent) {
     
            marker = activites[1].categories[2].entites[id_ent];
            map.addOverlay(marker);
     
            alert(activites[1].categories[2].entites[id_ent].nom_ent);
     
        }
     
    }