Как обновить содержимое во всплывающем окне Leaflet?

Я работаю с воском с помощью 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!';

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


person Mike Shultz    schedule 09.03.2012    source источник
comment
Настройка этого ответа может сработать для вас: stackoverflow.com/a/12712987/1224449.   -  person araichev    schedule 05.09.2013
comment
Тем, у кого есть эта проблема, это может помочь stackoverflow.com/questions/34504816/   -  person Brandan    schedule 09.04.2016


Ответы (1)


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

person Acorn    schedule 15.03.2012
comment
Какие слои? gjStates? Это импортирует все различное содержимое состояния, и я просто хочу изменить содержимое всплывающих окон для каждого объекта на этом слое. - person Mike Shultz; 24.03.2012
comment
e.layer в обработчике событий featureparse - person Acorn; 24.03.2012