2015-07-22 44 views
2

我有一个leaflet地图,我刷新从服务器的新数据。您可以点击地图功能,并会显示popup。每次刷新时,我使用map.removeLayer删除layer,使用L.geoJson添加新数据,但弹出消失。我希望弹出窗口能够保持新数据的活跃状态。我知道这可能不会按照我的方式去除layer。有没有另外一种方法来刷新图层数据并保持选定的功能弹出?更新传单GeoJson图层并保持选定的功能弹出

这是我从服务器获取新数据后调用的刷新函数。

function refreshMapLocations() { 
    map.removeLayer(locationLayer);  
    locationLayer = L.geoJson(locations, { 
     onEachFeature: onEachFeature 
    }).addTo(map); 
} 

这在弹出的每个功能

function onEachFeature(feature, layer) { 
    if (feature.properties && feature.properties.UserName) { 
     layer.bindPopup(feature.properties.UserName); 
    } 
} 
+1

在刷新图层之前保存所选功能的ID,然后在刷新图层后以编程方式打开弹出窗口。它会解决你的问题吗?保持弹出窗口打开而删除功能没有任何意义。 – muzaffar

+0

这是我的想法,如果没有一种方式让传单API来做到这一点。 – Heinrich

回答

0

这个工作,我跟踪我,在弹出的内容设置ID的。添加图层后,我存储Popup,其中clickedId并且popupOpen

var popupToOpen; 
var clickedId; 

function onEachFeature(feature, layer) { 
    if (feature.properties && feature.properties.UserName) { 
     if (feature.properties.MarkerId == clickedId) {    
      layer.bindPopup("div id='markerid'>"+feature.properties.MarkerId+"</div>feature.properties.UserName); 
     } else { 
      layer.bindPopup("div id='markerid'>"+feature.properties.MarkerId+"</div>feature.properties.UserName); 
     } 
    } 
} 

function refreshMapLocations() { 
    map.removeLayer(locationLayer);  
    locationLayer = L.geoJson(locations, { 
     onEachFeature: onEachFeature 
    }).addTo(map); 

    if (popupToOpen != null) { 
     popupToOpen.openPopup(); 
    } 
} 

function initMap() { 
    ... 
    map.on('popupopen', function (e) { 
     ... 
     //clickedId = id from event popup 
    } 
} 
+0

你有这个小提琴吗? – Tenz