J'utilise OpenLayers avec Waze (couches de cartes) et j'ai quelques problèmes avec des variables qui ne se propagent pas. J'ai ce code: var lonlat = new Array(), infodiv = new Array();
Variables Javascript ne se propageant pas à travers
for (var i = 0; i < stations.length; i++)
{
if (i == 0)
icon_temp = icon;
else
icon_temp = icon.clone();
lonlat[i] = new OpenLayers.LonLat(stations[i].lon,stations[i].lat);
infodiv[i] = "<div style='font-size: 14px;'><strong>" + stations[i].company + "</strong></div>";
marker = new OpenLayers.Marker(lonlat[i],icon_temp);
marker.setOpacity(0.8);
marker.events.register('mousedown', marker, function(evt) {
popup = new OpenLayers.Popup.FramedCloud(null,
lonlat[i],
null,
infodiv[i],
anchor=null,true,null);
map.addPopup(popup);
OpenLayers.Event.stop(evt);
});
markers.addMarker(marker);
}
Le code doit parcourir le tableau « stations » et ajouter des marqueurs à la carte. Cela fonctionne très bien!
Le problème est avec les tableaux 'lonlat' et 'infodiv'. Le 'OpenLayers.Popup.FramedCloud' ne les voit pas - il est retourné null (vérifié en utilisant FireBug). Si je perds le tableau et chaque fois que attribuer lonlat = ... et infodiv = ... comme ceci:
for (var i = 0; i < stations.length; i++) { if (i == 0) icon_temp = icon; else icon_temp = icon.clone();
lonlat = new OpenLayers.LonLat(stations[i].lon,stations[i].lat);
infodiv = "<div style='font-size: 14px;'><strong>" + stations[i].company + "</strong></div>";
marker = new OpenLayers.Marker(lonlat,icon_temp);
marker.setOpacity(0.8);
marker.events.register('mousedown', marker, function(evt) {
popup = new OpenLayers.Popup.FramedCloud(null,
lonlat,
null,
infodiv,
anchor=null,true,null);
map.addPopup(popup);
OpenLayers.Event.stop(evt);
});
markers.addMarker(marker);
}
il est propogated à la fonction FrameCloud et est affiché - mais le problème est-ce qu'il montre seulement le dernier lonlat et infodiv (c'est comme s'il ne détient pas une copie d'eux mais tient les objets réels - ainsi chaque itération 'lonlat' et 'infodiv' sont remplacés par les dernières informations).
Des idées comment cela peut-il être surmonté?
Merci, Roman
vraiment génial! Merci! J'ai mis la fonction (i) dans la partie registre (près de la fonction (evt)) et ça a marché! Remercier!!! – Roman
Merci beaucoup, j'avais exactement le même problème et je devenais fou. Je n'aurais jamais pensé à des fuites de fermeture. – ogrisel
Upvote juste résolu un mal de tête ennuyeux avec exactement ce scénario et OpenLayers ... bien que je ne peux toujours pas trouver le problème de fermeture dans mon code. – Jeff