2015-07-22 30 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

相關問題