web-dev-qa-db-ja.com

`popupopen`イベント中にリーフレットのマーカーを識別する方法は?

マーカーがクリックされたら、クリックされているマーカーに対応するidを見つけ、バックエンドAPIからデータを取得し、新しく取得したデータをのcontentに追加するコードを実行する必要があります。開くポップアップ。

マーカーのクリックイベントを聞くことができる唯一の方法は

map.on('popupopen', function(e){
    // How to retrieve marker?
    // eg: Assign an id on creation, retrieve it now during popupopen
};)

これがどのマーカーであるかをどのように見つけることができますか?各マーカーにid属性を追加し、idイベント中にこのpopupopenを取得することは可能ですか?

19
Nyxynyx

イベントオブジェクトには、ポップアップがバインドされるオブジェクト(つまりマーカー)である「_source」と呼ばれるプライベート属性を持つ「popup」属性が含まれています。 _sourceはプライベートであると想定されているため、これは正しい方法ではないようですが、他にどのように行うかはわかりません。

map.on('popupopen', function(e) {
  var marker = e.popup._source;
});
26
InPursuit

Javascriptオブジェクトには、任意のプロパティを定義できます。ポップアップを作成するときに、popup.markerを参照マーカーに設定します。その後、イベントハンドラーで後でアクセスできます。

12
datashaman

マーカーIDを取得するには、次のコードを使用できます。

map.on('popupopen', function(e) {
  var marker = e.popup._source.feature.properties.markerid;
});
1

他の答えは機能しませんでしたが、これは機能します:

map.on('popupopen', function(e) { alert(e.popup._source._popup._content); });

このライブラリはかなり不安定だと思います...そして、そもそもそのような情報を送信するのがなぜこれほど複雑なのかわかりません。 <肩をすくめる>

0
Jan Kyu Peblik