1

我想信息窗口,当鼠标移动到一个标记出现,这是我在CoffeeScript的代码:Gmaps4Rails信息窗口在鼠标悬停时

(39.7317, -104.92099999999999) 
(35.2638, -118.91200000000003) 
(36.6624, -121.64499999999998) 

但这:此负载

$(document).on 'map:ready', -> addHoverHandlers() 

addHoverHandlers = -> 
    # m is Gmap4Rails marker, doc in gmaps4rails.base.js.coffee 
    for m in Gmaps.map.markers 
    # marker is a Google Maps Marker 
    # https://developers.google.com/maps/documentation/javascript/reference#Marker 
    marker = m.serviceObject 

    console.log marker.getPosition().toString() 
    # Show the infowindow when user mouses-in 
    google.maps.event.addListener marker, "mouseover", -> 
     console.log marker.getPosition().toString() 
     m.infowindow.open marker.map, marker 

    # Hide the infowindow when user mouses-out 
    google.maps.event.addListener marker, "mouseout", -> 
     m.infowindow.close() 

此代码输出鼠标在每个标记(坐标不改变):

(36.6624, -121.64499999999998) 

为了把问题的情况下,她的e是我如何在ERB文件触发map:ready事件:

<% content_for :scripts do %> 
    <script type="text/javascript"> 
     Gmaps.map.callback = function(){ 
      console.log('callback'); 
      $(document).trigger('map:ready'); 
     } 
    </script> 
<% end %> 
<%= yield :scripts %> 

回答

2

我有完全相同的问题:我不知道为什么,但是当你在Gmaps.map.markers环和尝试绑定鼠标悬停监听器函数,它将始终评估标记变量作为循环中的最后一个标记。

我的解决方法是:不要使用标记变量在你的鼠标悬停功能,使用this反而是在Gmaps.map.markers一个Gmaps Marker对象,循环,找到相匹配的一个。

这里是你的代码的修改:

$(document).on 'map:ready', -> addHoverHandlers() 

addHoverHandlers = -> 
    # m is Gmap4Rails marker, doc in gmaps4rails.base.js.coffee 
    for m in Gmaps.map.markers 
    # marker is a Google Maps Marker 
    # https://developers.google.com/maps/documentation/javascript/reference#Marker 
    marker = m.serviceObject 

    console.log marker.getPosition().toString() 
    # Show the infowindow when user mouses-in 
    google.maps.event.addListener marker, "mouseover", -> 
     console.log marker.getPosition().toString() 
     # Loop on Gmaps.map.markers and find the one using this 
     for m2 in Gmaps.map.markers 
     if m2.serviceObject == this 
      m2.infowindow.open m2.serviceObject.map, m2.serviceObject 

    # Hide the infowindow when user mouses-out 
    google.maps.event.addListener marker, "mouseout", -> 
     m.infowindow.close() 

我知道这是实现鼠标悬停功能非常低效的方式。至少,它工作。

hth