1

Использование Rails 3.2.13, ruby ​​1.9.3p374 и Gmaps4rails 1.5.6.gmaps4rails: Как реализовать кликабельную ссылку на маркер

Я боролся с чем-то, что, поначалу, я думал, должно быть довольно прямолинейно: я хочу отобразить маркер, который при нажатии будет перенаправлен на определенный путь, загружая этот путь в том же окне.

Gmaps4rails не имеет легкого варианта для этого в своем description. Поэтому я провел бесчисленные часы в Интернете, и два лучших хита, которые я нашел здесь, в StackOverflow: this пахнет правильным путем, но this one кажется также полезным.

В конце концов, мой контроллер выглядит следующим образом:

@gmapsjson = current_user.houses.all.to_gmaps4rails do | house, marker | 
    marker.title house.reference 
    marker.json({:link => polymorphic_url(house, :routing_type => :path)}) 
end 

Это правильно (я думаю), генерируя следующий в обработанном HTML:

<script src="//maps.google.com/maps/api/js?v=3.8&amp;sensor=false&amp;client=&amp;key=&amp;libraries=geometry&amp;language=&amp;hl=&amp;region=" type="text/javascript"></script> 

<script type="text/javascript"> 
    Gmaps.map = new Gmaps4RailsGoogle(); 
    Gmaps.load_map = function() { 
    Gmaps.map.map_options.auto_zoom = false; 
    Gmaps.map.map_options.zoom = 3; 
    Gmaps.map.initialize(); 
    Gmaps.map.markers = [{"title":"First House","link":"/houses/1","lat":-3.4671425,"lng":12.5264373},{"title":"Second House","link":"/houses/2","lat":-4.5543296,"lng":-3.4151647}]; 
    Gmaps.map.create_markers(); 
    Gmaps.map.adjustMapToBounds(); 
    Gmaps.map.callback(); 
}; 
Gmaps.oldOnload = window.onload; 
    window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); }; 
</script> 

Маркеры на нужных местах. Но теперь, интерпретируя описано на этой first relevant reference, я печатаю прямо на виду, убедившись, что он будет отображаться ниже всех остальных JavaScripts Gmaps4Rails свалки в результате HTML:

<script type="text/javascript"> 
    function redirect_to(url) { 
    window.location = url 
    }; 
    Gmaps.callback = function() { 
    for (var i = 0; i < Gmaps.map.markers.length; ++i) { 
     google.maps.event.addListener(Gmaps.map.markers[i].google_object, 'click', redirect_to(Gmaps.map.markers[i].link)); 
    } 
}; 
</script> 

Но теперь, когда я загрузить страницу, мой Firefox javascript console скажет:

TypeError: Gmaps[load_function_name] is not a function 

for (key in Gmaps) { 
    value = Gmaps[key]; 
    searchLoadIncluded = key.search(/load/); 
    if (searchLoadIncluded === -1) { 
    load_function_name = "load_" + key; 
    _results.push(Gmaps[load_function_name]());   <=== Points to this line 
    } else { 
    _results.push(void 0); 
    } 
} 

Итак, любые идеи о том, что не так?

Спасибо заранее,

Marco

+0

Вы попробовали этот ответ? http://stackoverflow.com/questions/8608602/make-map-marker-direct-link-onclick-for-gmaps4rails – Benj

+0

Я сделал, да. Это упоминалось как «но это кажется полезным» в первоначальном вопросе. Но спасибо, что обратил мое внимание на это. :) Этот подход дал мне неизвестную «google» в консоли javascript. –

ответ

6

Вместо того, чтобы делать это в JavaScript вы можете просто генерировать все HTML включая ссылки контроллер. Примечание: Для того, чтобы получить ссылку генерироваться правильно его настроить отдельно и назначен его к переменной

Это то, что мой locations_controller.rb содержит:

@json = Location.all.to_gmaps4rails do |location, marker| 
    location_link = view_context.link_to location.name, location_path(location) 
    marker.title location.name 
    marker.infowindow "<h4><u>#{location_link}</u></h4> 
         <i>#{location.address}</i>" 
end 

Когда вы установите его правильно, вы получите хэши, сгенерированные, которые выглядят что-то вроде этого

{"title":"Home", 
"description":"<h4><u><a href=\"/locations/1\">Place</a></u></h4> 
<i>123 E Main St. Anytown, USA</i>", 
"lat":29.585019, 
"lng":-81.319479} 

вики страницу here помогла мне. Надеюсь, это вам поможет

Смежные вопросы