2016-03-22 4 views
1

マップ上にカスタムアイコン(DivIcons)を持つマーカーがあります。リーフレットでマーカーのアイコンのHTMLElementにアクセスする

マーカーをクリックすると、アイコンのHTMLElementにアクセスして、クラスを追加または削除したいと考えています。

HTMLElementにアクセスするための唯一の方法は、_iconプロパティです。私はそれが私有財産だと理解していますが、私は別の方法を見つけることができません。

options.iconは、このマーカーの具体的なHTMLElementではなくアイコンオブジェクト(多くのマーカーで使用されています)を返します。

マーカーのHTMLElementにアクセスする安全な方法をご存知ですか?

+0

「_icon」プロパティを使用しても問題はありません。なぜあなたはそれを使うことを躊躇していますか? –

+0

@LazarevAlexandr、残念ながらプライベートフィールドのように見えます(_で始まります)。 – Neekobus

答えて

1

残念ながら、JavaScriptにはプライベートプロパティのネイティブサポートがありません。しかし、それらをエミュレートするいくつかのテクニックがあります:接頭辞を使用するもの、他のクロージャ。

アンダースコア接頭辞の使用は単なるコーディング規約であり、言語によって強制されません。「プライベートであると思われる」プロパティにユーザーが直接アクセスするのを防ぐことはできません。このメソッドは安全ではなく、クライアントコードのガイドラインとしてのみ機能します。だから私はどんな害も_iconのプロパティにアクセスすることによって行うことはできないと思う。

プロパティが外部からアクセスされる可能性なしにプライベートであると想定されている場合、通常、コンテキストにバインドされずに特定のスコープのローカル変数として設定されます。このタイプの変数は、クロージャの助けを借りてのみ外部からアクセスでき、定義されていない場合は変数にアクセスできません。

+1

私はそれが唯一のコンベンションだと知っていますが、このプロパティに関するドキュメントがないので、このプロパティが次のバージョンでは消滅しないようにしたいと考えていました。 ところで、今のところ私はそれを使用しています、そして、それは私が必要とするものです。 – Neekobus

1

私はそれにアクセスするための文書化方法を発見した:

私は「クリック」イベントにいるので、私はコールバックでevent.originalEvent.targetとマーカーのにHTMLElementにアクセスすることができます。

http://leafletjs.com/reference.html#event-objects

+0

それでもプライベートプロパティを参照しています: 'e.target._icon'。 :) –

+0

いいえ! 'event.originalEvent.target'! – Neekobus

+0

ああ、申し訳ありません。よくやった! –

関連する問題