2012-03-09 10 views
6

Sto lavorando con Wax con Leaflet. Sto impostando una mappa degli Stati Uniti, disegnando i confini dello stato con GeoJSON usando il volantino L.GeoJSON.Come si aggiorna il contenuto in un popup di Opuscolo?

Sono in grado di ottenere tutto impostato durante il caricamento della mappa, ma devo essere in grado di regolare il contenuto nei popup dopo che la mappa è stata disegnata. Ecco una versione ridotta di quello che sto facendo:

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]); 
    } 
}); 

Ora, tutto pareggi bene, popup hanno una buona conent, ma poi ho voluto comunque cambiare in un secondo momento e non c'è modo di fare riferimento a esso. Ho visto nella fonte che bindPopup() restituisce 'this', che pensavo fosse l'oggetto L.Popup, ma che finisse con qualcos'altro. Quindi, ad esempio, il codice seguente ascolterà il popup attivo, non quello specifico per lo specifico oggetto L.Path (stato) che sto cercando di ottenere.

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

Scavando attraverso il DOM con firebug, posso anche vedere che il contenuto comparsa occupa una variabile interna e posso aggiornarlo. Tuttavia, l'aggiornamento di questo non aggiorna l'HTML, e non c'è modo per me di scoprire che l'Alaska ha la chiave di 52. Anche gli _layers [52] non hanno il metodo setContent() che mi piacerebbe se fosse un L Oggetto .Popup.

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

Quindi, sono un po 'bloccato e non trovo quello che mi serve. C'è un modo per me di fare riferimento e aggiornare il contenuto per un popup specifico sulla mappa dopo il rendering iniziale?

+0

La modifica di questa risposta potrebbe funzionare per voi: http://stackoverflow.com/a/12712987/1224449. – araichev

+0

Per gli altri con questo problema, questo può aiutare http://stackoverflow.com/questions/34504816/leafletjs-how-to-get-a-handle-to-the-active-pop-marker – Brandan

risposta

1

Sono abbastanza sicuro che è possibile mantenere i riferimenti a tutti i livelli e quindi chiamare layer.bindPopup() in un secondo momento per modificare il contenuto popup.

+0

Quali layer? gjStates? Questo importa tutti i diversi contenuti di stato e voglio solo cambiare il contenuto popup su ogni oggetto su quel livello. –

+0

'e.layer' nel gestore di eventi featureparse – Acorn

Problemi correlati