Google Maps API v3 でマーカーのコンストラクタに渡すオプションにオレオレプロパティを追加してみる修行
えっと、Google Maps API v3 のマーカーオブジェクトを作るときのオプションについて。
オプションとして連想配列リテラルを渡したりするわけですが、そのとき勝手なキーの値を渡すと、マーカーオブジェクトのプロパティになるようだ。これを使うとマーカーにイベントを登録したときにイベントハンドラの中でこのプロパティを使えて便利だったよ、ということで。
えっと、まあ、連想配列 fields に地点オブジェクト(自前に定義したもの)が入っているとして、
function panTo(key) { if (! key in fields) return; var field = fields[key]; map.panTo(field.latlng); map.setZoom(field.zoom); }
こんな関数 panTo() があるとして、
for (var key in fields) { var field = fields[key]; if (field['poly']) { field.poly.setMap(map); var image = new google.maps.MarkerImage(field.mark.image, new google.maps.Size(64, 64), new google.maps.Point(0,0), new google.maps.Point(0, 32)); var shadow = new google.maps.MarkerImage(field.mark.shadow, new google.maps.Size(64, 64), new google.maps.Point(0,0), new google.maps.Point(0, 32)); var opts = { position : field.latlng, title : field.name, icon : image, shadow : shadow, map : map, key : field.key }; var marker = new google.maps.Marker(opts); google.maps.event.addListener(marker, 'click', function(e) { panTo(this.key); });
まあ、こんな感じでマーカーを作ってイベントを登録してみたよ、と。
Marker のコンストラクタに渡している opts オブジェクトに key プロパティがありますが、これは Marker のコンストラクタで使われるプロパティとして定められているものではなくて、勝手に付け加えたもの。イベントハンドラのクロージャで this はイベントを登録した marker オブジェクトになるわけですが、ここで先ほど勝手に付け加えた key プロパティが拾えた、という話。
ドキュメント読んでないので不明だが、これって普通に知られていることだろうか。