gmaps4rails v2.0.3 - Gmaps.map未定义

时间:2013-11-27 01:06:24

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

我正在尝试使用this example之后的Gmaps4rails gem实现标记拖动功能但是我遇到了问题,因为未定义“Gmaps.map”对象并且我无法为地图添加回调处理可拖动的标记。

现在地图显示正确,但我被困在拖动部分。

我正在使用'gmaps4rails','2.0.3'

我在控制器中创建标记:

@locations = Location.all
@hash = Gmaps4rails.build_markers(@locations) do |location, marker|
  marker.lat location.latitude
  marker.lng location.longitude
end

在视图中:

= content_for :scripts do
  = javascript_include_tag "//maps.google.com/maps/api/js?v=3.13&sensor=false&libraries=geometry"
  = javascript_include_tag '//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js'
  = javascript_include_tag "/assets/custom_scripts/map_scripts.js"

%div{ :style => 'width: 800px;' }
#map{ :style => 'width: 800px; height: 400px;' }

:javascript
  createMap(#{raw @hash.to_json });

在JS中:

function createMap(items){
  var handler = Gmaps.build('Google');
  handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
    markers = handler.addMarkers(items);
    handler.bounds.extendWith(markers);
    handler.fitMapToBounds();
  });
}

我不确定此文档是否已过时,因为它们仍在使用

<%= gmaps("markers" => {"data" => @json, "options" => { "draggable" => true  } } ) %> 

我读到gmaps4rails v2上不再使用“gmap”功能

2 个答案:

答案 0 :(得分:3)

现在,地图对象已附加到处理程序。

  • handler.map检索gem构建的js代理对象以处理地图,并且可以自定义
  • handler.getMap()检索谷歌地图对象
  • handler.map.getServiceObject()是从代理对象获取Google对象的标准

回调现在是您在buildMap传递的功能。

您的markers var中包含所有标记。它们遵循标准,因此您可以访问google标记对象:markers[0].getServiceObject()

如果要将选项传递给标记,请将它们添加为第二个参数:

handler.addMarkers(items, options);

文档位于构建器中的代码中,see here

答案 1 :(得分:1)

我会在github页面上提交一个问题:

https://github.com/apneadiving/Google-Maps-for-Rails/issues

似乎repo是积极维护的,所以我确定repo所有者不介意更新他的一些wiki页面。

也就是说,通过DOM元素附加地图似乎已经取代了对视图辅助方法的需求,因此根本不需要辅助方法。换句话说,我敢打赌,如果您只是从示例源代码中删除该行,它可能会按预期工作。