gmaps4rails v2 - 多个地图

时间:2013-11-17 21:21:45

标签: ruby-on-rails google-maps gmaps4rails

我正在尝试显示多个地图,就像在v1中一样,如下所述:https://github.com/apneadiving/Google-Maps-for-Rails/wiki/(Multiple)-Maps

我使用唯一ID('map_n',其中n是)显示所有地图,但所有标记都显示在最后一个上。 这是我的“_map.haml”部分中的代码:

- map_id = 'map' << "_#{counter}"

.map_container
  .gmaps4rails_map{ id: map_id }

:javascript
  handler = Gmaps.build('Google');
  handler.buildMap({ provider: {}, internal: { id: '#{ map_id }' } }, function(){
    markers = handler.addMarkers([
      {
        "lat": 0,
        "lng": 0,
        "infowindow": "hello!"
      }
    ]);
    handler.bounds.extendWith(markers);
    handler.fitMapToBounds();
    handler.getMap().setZoom(12);
  });

处理此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您只需要为每个地图创建一个处理程序及其专用ID

在重新阅读您的问题之后,由于变量可见性,我认为这是一个问题:

  • 处理程序附加到窗口
  • 对于每个循环,前一个实例将被新的实例替换

所以:

  • 将所有内容包装在一个函数中以限制变量范围

或者:

  • 在每个循环中更改处理程序的名称

答案 1 :(得分:0)

我选择按照apneadiving的建议将所有内容包装在一个函数中。

:javascript
  $(function(handler) {
    handler = Gmaps.build('Google');
    handler.buildMap({ provider: {}, internal: { id: '#{ map_id }' } }, function(){
      markers = handler.addMarkers([
        {
          "lat": 0,
          "lng": 0,
          "infowindow": "hello!"
        }
      ]);
      handler.bounds.extendWith(markers);
      handler.fitMapToBounds();
      handler.getMap().setZoom(12);
    });
  });