我将 OpenLayers 与 Waze(地图图层)一起使用,并且在变量不传播时遇到了一些问题。我有这个代码:
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' 没有看到它们 - 它返回 null(使用 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' 被最新信息取代)。
如何克服?