Вопрос

I'm trying to have my markers as links to each page associated with them. So far I have managed to put a link in the info box, but I want to bypass this and just have the marker as the link. I'm using gmaps4rails gem.

Controller

@hash = Gmaps4rails.build_markers(@soiltemps) do |soiltemps, marker|
      location_link = view_context.link_to soiltemps.site, soiltemp_path(soiltemps)
      marker.lat soiltemps.latitude
      marker.lng soiltemps.longitude
      marker.picture({"url" => "/logo.png",
                      "width" =>  36,
                      "height" => 36})
      marker.infowindow "<h4><u>#{location_link}</u></h4> "
    end
Это было полезно?

Решение

You can do:

@hash = Gmaps4rails.build_markers(@soiltemps) do |soiltemps, marker|
  marker.lat soiltemps.latitude
  marker.lng soiltemps.longitude
  marker.picture({"url" => "/logo.png",
                  "width" =>  36,
                  "height" => 36})
  marker.json({ link: soiltemp_url(soiltemps) })
end

and add the listeners in your js:

markers_json = <%=raw @hash.to_json %>;
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
  markers = handler.addMarkers(markers_json);
  handler.bounds.extendWith(markers);

  for (var i = 0; i < markers.length; i++) {
    link = markers_json[i].link;
    google.maps.event.addListener(markers[i].getServiceObject(), 'click', function(){
      window.open(link);
    })
  }

  handler.fitMapToBounds();
});

Другие советы

For url to same window with back - You can do:

@hash = Gmaps4rails.build_markers(@soiltemps) do |soiltemps, marker|
  marker.lat soiltemps.latitude
  marker.lng soiltemps.longitude
  marker.picture({"url" => "/logo.png",
                  "width" =>  36,
                  "height" => 36})
  marker.json({ link: soiltemp_url(soiltemps) })
end

and add the listeners in your js:

markers

_json = <%=raw @hash.to_json %>;
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
  markers = handler.addMarkers(markers_json);
  handler.bounds.extendWith(markers);

  for (var i = 0; i < markers.length; i++) {
    link = markers_json[i].link;
    google.maps.event.addListener(markers[i].getServiceObject(), 'click', function(){
      window.location.assign(link);
    })
  }

  handler.fitMapToBounds();
});

More on window location assign (link)

http://www.w3schools.com/jsref/met_loc_assign.asp

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top