为gmaps4rails v2

时间:2015-07-31 09:28:53

标签: ruby-on-rails ruby gmaps4rails2

我没有在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似乎没有添加到标记中,或者应该以某种不同的方式访问。 应该怎么做?

1 个答案:

答案 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);