Как обновить содержимое во всплывающем окне Leaflet? - PullRequest
6 голосов
/ 10 марта 2012

Я работаю с Воск с Leaflet .Я настраиваю карту США, рисуя границы штатов с помощью GeoJSON, используя буклет L.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!');

Копание DOM с помощью firebugЯ также вижу, что содержимое всплывающего окна задано во внутренней переменной, и я могу его обновить.Однако его обновление не обновляет HTML, и у меня нет возможности узнать, что Аляска имеет ключ 52. _layers [52] также не имеет метода setContent (), на который я бы надеялся, если бы он был L.Popup объект.

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

Итак, я застрял и не могу найти то, что мне нужно.Можно ли как-нибудь ссылаться и обновлять содержимое для определенного всплывающего окна на карте после первоначального рендеринга?

1 Ответ

1 голос
/ 16 марта 2012

Я почти уверен, что вы можете просто сохранить ссылки на все слои, а затем вызвать layer.bindPopup(), чтобы изменить всплывающее содержимое.

...