gmaps4rails не рендерится в указанном идентификаторе div - PullRequest
0 голосов
/ 09 декабря 2018

Я использую Gmaps4Rails (Google Maps для Rails) в Active Admin.Пока все хорошо, за исключением случаев, когда мне нужно было добавить несколько карт на одной странице шоу.

gem 'gmaps4rails', '~> 2.1', '>= 2.1.2'

Я извлек импорт сценариев в HTML, который я вызываю только один раз в представлении шоу, поэтому я не получаю сообщение об ошибке:

/views/admin/_map_include_scripts.html.erb

<script src="//maps.google.com/maps/api/js?key=<%= ENV['GOOGLE_KEY'] %>"></script>
<script src="//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js"></script>
<script src='//cdn.rawgit.com/printercu/google-maps-utility-library-v3-read-only/master/infobox/src/infobox_packed.js' type='text/javascript'></script>

Тогда в шоу я делаю:

div id: 'map' do
  render '/admin/map_include_scripts'
  markers = DeliveryMarkersService.new(delivery).orders_markers
  render '/admin/map_scripts', markers: markers, map_div_id: 'map'
end

А в views/admin/_map_scripts.html.erb у меня есть:

<script>
  handler = Gmaps.build('Google');
  handler.buildMap({ provider: {}, internal: { id: '<%= map_div_id %>' }}, function(){
    markers = handler.addMarkers(<%=raw markers.to_json %>);
    handler.bounds.extendWith(markers);
    handler.fitMapToBounds();
    handler.getMap().setZoom(15);
  });
</script>

Пока это работает ОТЛИЧНО!Я вижу карты, маркеры, все.

Теперь я хочу добавить второй div со второй картой , поэтому сначала я попытался изменить первый div на следующий, чтобы убедиться, что я могу сказать Gmaps вкакой div для его отображения :

div id: 'map2' do
  render '/admin/map_include_scripts'
  markers = DeliveryMarkersService.new(delivery).orders_markers
  render '/admin/map_scripts', markers: markers, map_div_id: 'map2'
end

Но тогда карта не рендерится!Нет ошибок на консоли.Если я отправляю неверный идентификатор (div-идентификатор, который не существует), я получаю сообщение об ошибке.

Кто-нибудь знает, что происходит?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Не могли бы вы указать, что вы подразумеваете под «карта не отображается»?Это не видно на странице или DOM?Вы проверили исходный код / ​​DOM в инструментах разработчика?Если вы не видите ошибку, возможно, она рендерится, но просто не отображается правильно, например, ее ширина / высота установлена ​​в 0?

0 голосов
/ 20 декабря 2018

Ваша проблема может быть связана с выполнением render '/admin/map_include_scripts' дважды на одной и той же странице, что вызывает очередную загрузку карт и оверлейных API.Когда вы делаете это после того, как первый из них загружен, ваш render '/admin/map_scripts', markers: markers, map_div_id: 'map2' может выполнять карту, отрисовывающую JS до полной загрузки библиотек.Попробуйте переместить render '/admin/map_include_scripts' к общему фрагменту, вне каждого цикла карты div.Таким образом, библиотеки загружаются только тогда, когда вам не нужно ждать второй загрузки API.

render '/admin/map_include_scripts'
div id: 'map' do
  markers1 = DeliveryMarkersService.new(delivery1).orders_markers
  render '/admin/map_scripts', markers: markers1, map_div_id: 'map'
end

div id: 'map2' do
  markers2 = DeliveryMarkersService.new(delivery2).orders_markers
  render '/admin/map_scripts', markers: markers2, map_div_id: 'map2'
end
...