Я использую OpenLayers с Waze (слои Maps) и у меня есть некоторые проблемы с переменными, которые не распространяются.У меня есть этот код:
var lonlat = new Array(), infodiv = new Array();
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);
}
Код должен перебирать массив станций и добавлять маркеры на карту.Это работает просто отлично!
Проблема в массивах 'lonlat' и 'infodiv'.«OpenLayers.Popup.FramedCloud» их не видит - он возвращается нулевым (проверяется с помощью FireBug).Если я потеряю массив и присваиваю только каждый раз lonlat = ... и infodiv = ... примерно так:
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);
}
он распространяется в функцию FrameCloud и показывается - но тогда проблемаон показывает только последние lonlat и infodiv (как будто он не содержит их копии, но содержит фактические объекты - поэтому каждая итерация 'lonlat' и 'infodiv' заменяется последней информацией).
Как это можно преодолеть?