Я использую Gmaps4rails и успешно немного заработал, но я немного в тупике. Вероятно, из-за моих начинающих навыков JS. Я пытался следовать примерам в различных вопросах, но я не уверен, где я ошибаюсь.
Когда моя карта загружается, Gmaps.map.callback работает нормально, карта загружается, я нажимаю на маркер, и срабатывает событие прослушивателя.
На мой взгляд:
<% content_for :scripts do %>
<script type="text/javascript">
Gmaps.map.callback = function(){
for(var i = 0; i < Gmaps.map.markers.length; i++){
marker = Gmaps.map.markers[i];
google.maps.event.addListener(marker.serviceObject, 'click',
(function(marker){
return function(){
alert(marker.id);
}
})(marker)
)
}
}
</script>
<% end %>
Это предупредит об идентификаторе маркера из json, созданного в контроллере.
Затем у меня есть функция поиска, которая обновляет местоположение карты и заменяет маркеры. Это вызывается в вызове ajax. Так вот в контроллерах .js.erb делаю так:
Gmaps.map.replaceMarkers(<%= raw @json %>);
Вроде все нормально, у меня карта загружается с новыми маркерами, но даже слушатель на маркерах не работает.
Итак, мой вопрос: как мне заставить эти новые маркеры иметь прослушиватель для события щелчка. Нужно ли как-то сбрасывать обратный вызов? Я думаю, что он должен запуститься до загрузки карты, но в этом случае я не перезагружаю карту, а просто заменяю маркеры.