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 プロパティが拾えた、という話。

ドキュメント読んでないので不明だが、これって普通に知られていることだろうか。

2012-05-03の読みさし

新農民になろう! 就農計画の設計と実例:30%

新農民になろう! 就農計画の設計と実例

新農民になろう! 就農計画の設計と実例

つれあいにすすめられて。事例のところ、読みにくかった。これからわかりやすくなるんだろうか。

2012-02-20の読みさし

カラフル:100%

カラフル

カラフル

面白かった。二回も読んでしまった。

タネが危ない:50%

タネが危ない

タネが危ない

雄性不稔とか、F1 とか、わかっているようでわからなくなっちゃってる。しっかり理解しておきたい。

数学的にありえない 上:4%

数学的にありえない 上

数学的にありえない 上

タイトルだけで借りてきてしまった。読む暇なんてないのに。

2011-11-10の読みさし

コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer's SELECTION):100%

コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer's SELECTION)

コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer's SELECTION)

だいたい概要は理解した。あとはどんどん使ってみないとだな。

2011-10-07 のツイート

  • 10:17:12 RT @unaubot: 私、bot です QT @E_Lightfield なるほど…!RT @notas1485: 飯能→つい反応 飯能+反応→そうなんです 飯能+bot→私、botです
  • 11:18:26 Creap も買ってきて飲み比べてみるか。このままだと Brite を 300g 消費するうち Brite に慣れてしまう。ま、それはそれでいいか
  • 18:25:04 mysqldump のオプションとか、全然覚えておけない ...
  • 23:08:15 mysqldump --no-data、mysqldump --no-create-info、どっちも使うとき調べて、すぐに忘れてしまう。
  • 23:15:00 今やっている作業は早く終わらせたい。今日は徹夜にトライしてみるか。

2011-10-06 のツイート

  • 09:29:34 五反田。
  • 09:31:28 朝洗濯したのに、干してくるのを忘れちゃった。 #paparen
  • 10:05:45 @hitobluemoon お母さん、がんばって !!
  • 10:07:04 gdb 使ってるのに printf デバッグを併用している。gdb 使いこなせるようになりたいな #gdb
  • 10:08:34 C 言語で書いたらさらさら書けそうなところを Qt のクラスライブラリを使って実現しようとしてはまっている。いかんな。 #Qt
  • 10:50:42 保育園の送り迎え、今日はつれあいにお任せ。ちょっと寂しい。 #paparen
  • 11:09:35 aipo って使いやすいですか。このたび、インストールして試す必要が出てきました。公式サイトを見ても、アプリケーションサーバや DB については書かれていないような。組込みの WEB サーバや RDBMS を組み込んでいるのかな。

2011-10-05 のツイート

  • 10:06:05 五反田。
  • 10:06:47 つれあいはおいしいと言っているけれど、何か一つ足りない気がする。今回作ったあんこ
  • 10:48:40 M-g g、か。emacs は長いこと使ってきているけれど、いつも M-x goto-line って打ってる。そろそろ覚えておくか。 #emacs
  • 10:59:06 今日も gdb を使ってデバッグ。コマンドとかぜんぜん覚えていない。 #gdb
  • 12:22:49 HTTP プロキシの設定エラーがあると、qFatal() しているところでアボートする。原因まで追うと大変そうなので、正しいプロキシの設定に改めてアボートを回避するだけにしておこう #Qt
  • 13:57:46 混雑を避け、遅めの昼食。ハンバーグ定食にコーヒーまでついて、をおごってもらいました。ありがたい。
  • 14:07:45 あれ? qFatal() すると abort するのかな? #Qt