gmaps4rails无法在指定的div ID中呈现

时间:2018-12-09 20:17:59

标签: ruby-on-rails gmaps4rails

我正在Active Admin中使用Gmaps4Rails(Google Maps for Rails)。到目前为止一切都很好,除了我必须在同一显示页面上添加多个地图的时候。

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

我将脚本的导入提取到了在show视图中只调用一次的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

但是地图不会渲染!控制台上没有错误。 如果我发送了无效的ID(不存在的div ID),则会收到错误消息。

有人知道发生了什么事吗?

2 个答案:

答案 0 :(得分:2)

您的问题可能与在同一页面上执行两次my $merged = $workbook->add_format(); $worksheet->merge_range("A10:A11", qq{=hyperlink("#'Sheet3'!A1","Click Here!")}, $merged); 有关,这又触发了地图和覆盖API的另一次加载。在第一个载入后执行此操作时,render '/admin/map_include_scripts'可能会在完全载入库之前执行地图渲染JS。尝试将render '/admin/map_scripts', markers: markers, map_div_id: 'map2'移到每个div映射循环之外的公共代码段。 这样,仅在不需要等待第二次API加载时才加载库。

render '/admin/map_include_scripts'

答案 1 :(得分:0)

您能否指定“地图不渲染”是什么意思?在页面或DOM上不可见?您是否在开发人员工具中检查了源代码/ DOM?如果您没有收到错误,则可能会呈现该错误,但显示不正确,例如宽度/高度设置为0?