我正在使用 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 中的标记 id 发出警报。
然后我有一个搜索功能,可以更新地图的位置并替换标记。这是在 ajax 调用中调用的。所以在控制器 .js.erb 我这样做:
Gmaps.map.replaceMarkers(<%= raw @json %>);
一切似乎都很好,我的地图加载了新的标记,但偶数侦听器在标记上不起作用。
所以我的问题是,如何让这些新标记拥有点击事件的监听器。我需要以某种方式重置回调吗?我认为它必须在地图加载之前运行,但在这种情况下,我不会重新加载地图,只是替换标记。