goolge maps 4 rails gem を使用しています。
マウスオーバーでマーカーごとに情報ウィンドウを開き、マウスアウトで閉じるようにしています。infowindow.open が機能しません。
次のコードを使用すると、次のようになります: Uncaught ReferenceError: infowindow is not defined. 私は何を間違っていますか?これは、このリスナーを追加する適切な場所ですか?コードを保存する組み込みメソッドはありますか?
<script type="text/javascript">
handler = Gmaps.build("Google",
{ markers:
{ clusterer: {
gridSize: 8,
maxZoom: 12,
styles: [ {
textSize: 1,
textColor: '#45A6DD',
url: 'images/mapCluster.png',
height: 51,
width: 51 }
]
}
}
});
var image = 'images/marker.png';
handler.buildMap({
provider: {
zoom: 4,
minZoom: 4,
maxZoom: 13,
draggable: true,
zoomControl: true,
scrollwheel: false,
disableDoubleClickZoom: true,
disableDefaultUI: true,
center: new google.maps.LatLng(37.8282, -98.5795),
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles: Maps.styles,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL
}
},
internal: {
id: 'map'
}
},
function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
for (i = 0, len = markers.length; i < len; i++) {
marker = markers[i].getServiceObject();
google.maps.event.addListener(marker, 'mouseover', function() {
infowindow.serviceObject.open(Gmaps.map.map, marker.serviceObject);
});
}
}
);
</script>
関連するかどうかはわかりませんが、コントローラーアクションを介して渡すハッシュは次のとおりです。
@hash = Gmaps4rails.build_markers(@cities_for_map) do |city, marker|
marker.infowindow render_to_string(:partial => "/destinations/map_tile.html", :locals => { :city => city})
marker.lat city.latitude
marker.lng city.longitude
marker.picture({
"url" => "/images/Marker.png",
"width" => 20,
"height" => 20 })
end
スクリプトに以下を追加しました
クラス @MyMarker は Gmaps.Google.Builders.Marker を拡張します
create_infowindow_on_click: ->
@addListener 'mouseover', @infowindow_binding
そして私のハンドラーを更新しました:
handler = Gmaps.build("Google",
{ markers:
{ clusterer: {
gridSize: 8,
maxZoom: 12,
styles: [ {
textSize: 1,
textColor: '#45A6DD',
url: 'images/maps/cluster.marker.png',
height: 51,
width: 51 }
]
}
},
builders: {
Marker: KhMarker
}
});
それは今動作します:)