7

LeafletWaxを使用しています。リーフレットの 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 は更新されず、アラスカが 52 のキーを持っていることを知る方法はありません。 .Popup オブジェクト。

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

だから、私はちょっと立ち往生していて、必要なものが見つかりません。最初のレンダリング後にマップ上の特定のポップアップを参照してコンテンツを更新する方法はありますか?

4

1 に答える 1

1

すべてのレイヤーへの参照を保持しておきlayer.bindPopup()、後で呼び出してポップアップのコンテンツを変更できると確信しています。

于 2012-03-15T23:05:55.950 に答える