我正在尝试使用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”功能
答案 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元素附加地图似乎已经取代了对视图辅助方法的需求,因此根本不需要辅助方法。换句话说,我敢打赌,如果您只是从示例源代码中删除该行,它可能会按预期工作。