Рендеринг Gmap через вызов AJAX с помощью Gmaps4rails

Здесь есть темы, которые пытаются охватить это: Gmaps4rails: карта не отображается при динамической загрузке и особенно здесь: Визуализация карты Google с использованием gmaps4rails через Ajax, также смотрел скринкаст, в котором gmap динамически обновляется, но, похоже, он все еще не работает.

Я пытаюсь загрузить карту в раскрывающуюся вкладку, только если нажата кнопка, отображающая направление между пользователем и предложением. В моем частичном файле _location.html.erb у меня есть:

<%= gmaps({ "direction" => { "data" => { "from" => current_user.location, "to" => @offer.location } } })%>

(места являются адресами)

Теперь это хорошо работает, когда партиал визуализируется немедленно. Однако, если я попытаюсь отобразить частично через вызов AJAX позже, после того как вся страница уже изначально загружена, gmap не отображается. Можно ли инициализировать и визуализировать gmap с помощью вызова AJAX и затем отображать направления?


person axelwittmann    schedule 17.06.2011    source источник


Ответы (1)


Причина довольно проста: партиал содержит много javascript, который вы не можете загрузить и выполнить таким образом.

Таким образом, вы не можете использовать RJS там.

Правильный способ сделать это - UJS: получить данные с помощью вызова AJAX и отобразить результат. В следующем коде я использую jQuery.

На ваш взгляд добавьте:

//include google script
<script type="text/javascript" src='http://maps.google.com/maps/api/js?sensor=false&libraries=geometry'></script>
//include gmaps4rails javascript
<%=javascript_include_tag 'gmaps4rails' %>

<script type="text/javascript" charset="utf-8">
//load map when button click (replace with what you want)
$('#ajax_map').click(function(){
  //you have to set a size to the div otherwise the map won't display, that's the purpose of these css classes
  $('#map_container').addClass('map_container');
  $('#gmaps4rails_map').addClass('gmaps4rails_map');
  //create the map object
  Gmaps4Rails.initialize();
  //of course, replace these two with your dynamic data, you'd have to use some $.ajax jQuery method.
  Gmaps4Rails.direction_conf.origin = 'toulon, france';
  Gmaps4Rails.direction_conf.destination = 'paris, france';
  //read the js file, you can customize much more: https://github.com/apneadiving/Google-Maps-for-Rails/blob/master/public/javascripts/gmaps4rails.js
  Gmaps4Rails.create_direction();
});
</script>

<div id="map_container"> 
  <div id="gmaps4rails_map"></div>
</div>

<button type="button" id="ajax_map">Ajax Map</button>

Добавьте следующий класс в свой CSS:

#map-container {
  width: 800px;
}

#gmaps4rails_map {
  width: 800px;
  height: 400px;
}
person apneadiving    schedule 17.06.2011
comment
вау, спасибо за быстрый ответ! Работает отлично! Кроме того, gmaps4rails — действительно отличная жемчужина, спасибо за всю работу над ней! - person axelwittmann; 18.06.2011
comment
У меня нет прав на редактирование, но CSS должен быть # вместо . до н.э. это идентификаторы - person kinet; 23.06.2011
comment
@apnediving Извините, я новичок в рельсах, но безопасно ли помещать обычный ‹script type=text/javascript src=› в мой заголовок application.html.erb? - person LearningRoR; 25.06.2011
comment
@JustinRoR: это безопасно, пока вы доверяете источнику :) - person apneadiving; 25.06.2011
comment
@apneadiving Как мне изменить это для работы с v2 gmaps4rails? - person IT_puppet_master; 03.02.2015