0

我不想在 Gmaps4Rails v.2 上显示信息窗口,而是想在点击时转到对象的 url。因此,在 Gmaps4Rails v.1 中,它像这样向{link: <path>}每个标记的 json 添加一个额外的部分,然后设置重新调整事件侦听器。

这与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 调用之后直接添加这个咖啡脚本:

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

4

1 回答 1

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);
于 2015-11-26T10:50:13.160 回答