我没有在Gmaps4Rails v.2上显示infowindow,而是想点击该对象的url。
因此,在Gmaps4Rails v.1中,它像这样工作,为每个标记的json添加一个额外的{link: <path>}
部分,然后设置readjust事件监听器。
这与Make map marker direct link onclick for gmaps4rails非常相似,仅适用于Gmaps4Rails v.2(并且因为它完全重写我认为它在一个正确的问题中更好,而不是完全混合代码这样做的不同方式)
我了解到,为了在Gmaps4Rails v2中引入自定义json,我必须
@markers = Gmaps4rails.
build_markers(objects) do |object, marker|
marker.lat object.latitude
marker.lng object.longitude
marker.json({link: object_path(object)})
end
要更改事件处理程序,我必须在addMarker调用后直接添加此coffeescript:
markers = handler.addMarkers(#{raw @markers.to_json})
_.each markers, (marker) ->
link = < retrieve link from marker somehow?! >
google.maps.event.clearListeners(marker.getServiceObject(), 'click')
google.maps.event.addListener marker.getServiceObject(), "click", ->
window.location = link
return
不幸的是,链接json似乎没有添加到标记中,或者应该以某种不同的方式访问。 应该怎么做?
答案 0 :(得分:0)
@markers包含您的链接。问题是addMarkers批量调用Google构造函数而不使用不需要的参数,因此你的链接在JS循环中丢失。
# return array of marker objects
addMarkers: (markers_data, provider_options)->
_.map markers_data, (marker_data)=>
@addMarker marker_data, provider_options
# return marker object
addMarker: (marker_data, provider_options)->
marker = @_builder('Marker').build(marker_data, provider_options, @marker_options)
marker.setMap(@getMap())
@clusterer.addMarker marker
marker
您必须在ERB的每个循环中创建单独的标记,并对链接执行某些操作。如果更适合您的代码,您还可以重新创建一个标记数组。以下是一个示例
markers = []
<% @hash.each do |data| %>
marker = handler.addMarker(<%=raw data.to_json %>)
markers.push(marker)
marker.getServiceObject().addListener('click', function() {
console.log("marker has link <%= data[:link] %>")})
<% end %>
handler.bounds.extendWith(markers);