在传单中刷新GeoJSON层中的PopUp内容

时间:2015-11-04 14:47:06

标签: popup leaflet geojson

我正在使用传单的L.geoJSON()加载一个geojson文件来显示地图。

最初,我已经获得了每个功能的弹出窗口。弹出窗口显示某个属性" Count"。代码是:

var geoJSON = new L.geoJson(var_name,{
        onEachFeature: function(feature,layer){layer.bindPopup('Count :'+feature.properties.Count);},
        style: applyStyle
    }).addTo(map);

此代码工作正常。

在此之后,用户启动一个事件并进行ajax调用并为该属性分配新值" Count"每个功能。我还使用setStyle函数,以便根据" Count"的新值重新分配样式。这是代码:

$.ajax({
type: 'GET',
url: 'new_data.json',
dataType: 'json',
success: function(data){

var i;
for(i=0;i<48;i++){

var_name.features[i].properties.Count = data[i];
}
 geoJSON.setStyle(applyStyle);

}
});

样式更改效果很好但弹出窗口仍然包含属性的旧值&#34; Count&#34;。 有像setStyle这样的setPopUp函数。那么如何让popUp改变其价值呢?

换句话说,我们可以在加载geoJSON图层后再次调用onEachFeature方法吗?

P.S。:我没有为每个功能使用相同的弹出内容。在我进行ajax调用后,我更新了&#34; Count&#34;每个功能的属性。我希望每个功能的弹出窗口显示其新值#34; Count&#34;属性。

2 个答案:

答案 0 :(得分:1)

您现在正在使用的是setStyle图层的L.GeoJSON方法,该方法在调用时会迭代图层中包含的所有要素并调用每个要素的setStyle方法特征。 (如果该功能具有setStyle方法)。由于setPopup中没有L.GeoJSON方法。 (如果您希望在每个功能上使用相同的弹出内容,这是一个非常罕见的用例)您必须自己迭代GeoJSON层中的功能并在弹出窗口上设置新内容:

var geojsonLayer = new L.GeoJSON(geojsonCollection, {
    'onEachFeature': function (feature, layer) {
        layer.bindPopup('Initial content');
    }
}).addTo(map);

geojsonLayer.eachLayer(function (layer) {
    layer._popup.setContent('Updated content')
});

以下是关于Plunker的示例:http://embed.plnkr.co/uYHC8jZtgls351YhsmPS/preview

答案 1 :(得分:0)

使用@ iH8建议的每一层功能,我可以通过以下方式完成此操作:

    var j = 0; geoJSON.eachLayer(function (layer){
    layer._popup.setContent("new count = " + var_name.features[j++].properties.Count);