2017-07-31 3 views
2

Leaflet libraryを使用して、別のスクリプトで既に初期化されているマップ上のものを変更しようとしています。この他のスクリプトは、地図オブジェクトをグローバル変数、またはスクリプトでアクセスできる他の場所に保存しませんでした。現在、私のページには地図がありますが、地図オブジェクトはありません。初期化後のリーフレットマップオブジェクトの検索

私がしたいのは、すでに初期化されているマップのオブジェクトを取得して変更することです。例えば、関数L.getMap('myID')が存在する場合、そのようなメソッドを使用して、コンテナmyIDにリンクされたマップオブジェクトを取得したいと考えています。

TL; DR:コンテナのIDを使用して、既に初期化されたリーフレットマップのマップオブジェクトを取得する方法はありますか?

+0

はどのようにあなたのマップを初期化しますか? –

+0

他のスクリプトとは何ですか? –

+0

@FabianoTaioli私は、マップを読み込むためにhttps://www.mediawiki.org/wiki/Extension:Mapsを使用するMediaWiki拡張に取り組んでいます。私はその拡張機能のコードを調べてみましたが、 'map'変数はどこにでもアクセスできる場所には格納されていないようです。 – Joeytje50

答えて

1

mediawiki拡張機能で作成されたグローバルアレイからマップにアクセスできます。

エス:記録のために

window.maps.leafletList[0].map.getCenter() 
3

ページの最初のマップにアクセスするため、場合にあなたがマップが初期化される前に、注入/すなわち「他のスクリプトの前に(いくつかのJSコードを実行する可能性を持っています"が実行される)、リーフレットを非常に簡単にカスタマイズして、作成された各マップへの参照を保持することができます。

など。 L.MapクラスにaddInitHookconstructor hookを使用して:

// Before map is being initialized. 
var mapsPlaceholder = []; 

L.Map.addInitHook(function() { 
    mapsPlaceholder.push(this); // Use whatever global scope variable you like. 
}); 

// "Other script", can be in its own separate <script> and JS file. 
L.map('mapId'); // The map object is pushed into `mapsPlaceholder` array. 

// Then retrieve the map object to further manipulate the map. 
var map = mapsPlaceholder.pop(); 

デモ

https://plnkr.co/edit/mywpSbfRPFOnJ8c1RNsZ?p=preview

+0

この回答ありがとうございます!これは本当にエレガントなソリューションのようです。私は、私が使用しようとしているアプローチになるので、私の受け入れられた答えをFabiano'sに残すつもりですが、これははるかに一般的に適用可能なソリューションのように見えます。これを投稿していただきありがとうございます! – Joeytje50