7

我正在使用带有Leaflet的Wax。我正在设置美国地图,使用传单的 L.GeoJSON 用 GeoJSON 绘制州边界。

我能够在地图加载期间设置所有内容,但我需要能够在绘制地图后调整弹出窗口中的内容。这是我正在做的精简版:

var gjStates = new L.GeoJSON(null, null);
wax.tilejson(url, function(tilejson) {  
    map = new L.Map('map').addLayer(new wax.leaf.connector(tilejson)).addLayer(gjStates);

    gjStates.on("featureparse", function (e) {
        if (e.properties && e.properties.name){
            pops[e.id.substring(4)] = e.layer.bindPopup('<h4>Hello ' + e.properties.name + '!</h4>');
        }
    });
    for (s in usStateData) {
        gjStates.addGeoJSON(usStateData[s]);
    }
});

现在,一切都很好,弹出窗口有很好的内容,但是我想稍后对其进行更改,并且无法引用它。我在源代码中看到 bindPopup() 返回“this”,我认为它是 L.Popup 对象,但最终得到了其他东西。因此,例如,以下代码将更新活动弹出窗口,而不是我试图获取的特定 L.Path 对象(状态)的特定弹出窗口。

pops['AK']._map._popup.setContent('I am ALASKA!');

用 firebug 挖掘 DOM,我还可以看到弹出内容设置在一个内部变量中,我可以对其进行更新。但是,更新它不会更新 HTML,而且我无法发现 Alaska 的密钥为 52。 _layers[52] 也没有我希望的 setContent() 方法,如果它是 L .Popup 对象。

gjStates._layers[52]._popupContent = 'I am ALASKA!';

所以,我有点卡住了,找不到我需要的东西。在初始渲染后,我有什么方法可以参考和更新地图上特定弹出窗口的内容?

4

1 回答 1

1

我很确定您可以只保留对所有图层的引用,然后layer.bindPopup()稍后调用以更改弹出内容。

于 2012-03-15T23:05:55.950 回答