2012-04-27 9 views
2

私は、多くの人が、マーカーをクリックするとInfoWindowを開くコードを書いていることを知っています。しかし、InfoWindowは、右上のXがクリックされるまでそのまま残ります。つまり、Markerの可視性をfalseに設定すると、本質的に孤児のものが作成されます。InfoWindow同時に複数のInfoWindowインスタンスがマップに表示されることがあります。私はそれがユーザーがちょうど閉じたInfoWindowをクリックするだけのシンプルだと思いますが、それはMarkerを隠しているように感じて、関連するInfoWindowを隠すべきです。関連付けられたマーカーが非表示になっている場合、InfoWindowをクリーンアップするにはどうすればよいですか?

私は、このシナリオに対処するために、次のようなコードを書き始めています

google.maps.event.addListener(marker, "click", function() { 
    var bubble = new google.maps.InfoWindow({ 
     content: buildBubbleContent(param1, param2) 
    }); 
    bubble.open(map, marker); 
    //pretty standard stuff to here, but the next line is new (for me): 
    google.maps.event.addListenerOnce(marker, "visible_changed", function() { 
     bubble.close(); 
    }); 
}); 

は、誰もがやっているこのですか?それはと呼ぶべきデザインパターンのように感じます。ListenBack。私は、Google Mapsのドキュメントで取り上げられている問題を見たことがありません。私は助けることはできませんが、これを自動的に処理するために、InfoWindowに組み込まれている簡単なメカニズムが必要であると考えることはできません。これを行うための標準的な方法は私がちょうど逃したことはありますか?

答えて

0

答えとして、私はドキュメントを精練し、多くのコードサンプルを見続けてきたが、他の解決策を発見していないので、私は、この質問をマークしています。 InfoWindowには、関連付けられたマーカーがオフになっているときにマップから自動的に削除される機能はありません。後で誰かがより良い選択肢を見つけた場合、私は彼らの解決策をより良い答えとして喜んでマークします。

3

単一のinfoWindowの場合、マップの初期化中に常にグローバルとして作成します。私のクリックイベントで始まる:

if(infoWindow != null){ 
    infoWindow.close(); 
} 
infoWindow.setPosition(mouseEvent.latLng); 
infoWindow.setContent("...."); 
// etc 
+1

これは素晴らしいアイデアであり、InfoWindowが1つしか表示されないことを保証します。私はこのアプローチが気に入っていますが、マップの要件によって、ユーザーは複数のInfoWindowを開くことができると言われています。ユーザーは複数のInfoWindowを開いて、エリアのアドホックな概要を表示したり、複数のInfoWindowを開いてマーカーに関連付けられたデータを比較したりできます。最も重要なのは、関連付けられたマーカーの表示がオフになっている場合にInfoWindowを閉じる方法の問題に対処できないことです。 –

関連する問題