0

我试图弄清楚如何将当前位置标记添加到 gmaps4rails 地图以及map_points使用@map_points = @user.places.to_gmaps4rails. 我看到了以下帖子:

如何在 gmaps4rails 中使用标记显示用户的位置?

并尝试在那里实现 javascript,但它似乎不起作用。我将此代码添加到我的 javascript 部分,但由于某种原因,回调似乎没有触发:

= gmaps("map_options" => {"detect_location" => true, "center_on_user" => true, "auto_zoom" => false, "zoom" => 12, "auto_adjust" => true, "markers" => {"data" => @map_points}})

:javascript
  Gmaps.map.callback = function() {
    Gmaps.map.addMarkers({Lat: Gmaps.map.userLocation.lat(), Lng: Gmaps.map.userLocation.lng(), rich_marker: null, marker_picture:""});
    }

编辑:这就是我现在所拥有的,但由于某种原因addListenerOnce没有触发:

- content_for :scripts do
  :javascript
    Gmaps.map.callback = function() {
      google.maps.event.addListenerOnce(Gmaps.map.getMapObject(),'idle', function(){
        navigator.geolocation.getCurrentPosition(add_map_marker,displayError);
      });

    };

    function add_map_marker(position){
      var lat = position.coords.latitude;
      var lng = position.coords.longitude;
      Gmaps.map.addMarkers([{
        "lng": lng,
        "lat": lat,
        "picture": "http://googlemaps.googlermania.com/google_maps_api_v3/en/Google_Maps_Marker.png",
        "width": "37",
        "height": "34"
      }]);
    }

    function displayError(error){
      alert('There is an error displaying location');
    }
4

2 回答 2

2

你应该使用这里addMarkers定义的。

您应该传递一个 json 标记数组作为参数,由 ato_gmaps4rails或相同格式产生。


编辑:

:javascript
  Gmaps.map.callback = function() {
    Gmaps.map.addMarkers([
      {"description": "", "title": "", "sidebar": "", "lng": "", "lat": "", "picture": "", "width": "", "height": ""}
    ]);
  }

如果地图尚不存在,请看这里

于 2012-11-24T20:23:22.003 回答
1

您到底在哪里添加了该代码?因为我认为无需重新加载,例如:

Gmaps.loadMaps();

无论如何它都行不通...要解决该问题,我想您必须描述整个路径。你究竟是如何加载所有内容的?如果是标准方式,您需要重新加载地图。

我还建议仔细研究(gmaps4rails 源)

Gmaps4rails::JsBuilder.create_js 

方法,如果这是您的默认行为,请尝试使用此自定义注入来开发自己的方法以进行回调(大约第 34 行)。

其他方法是调用一些 ajax 并使用 ujs 做:

  $('#map').html('<%= escape_javascript( gmaps({:last_map => false}) ) %>');
  Gmaps.map = new Gmaps4RailsGoogle();
  Gmaps.load_map = function() {
    Gmaps.map.map_options.maxZoom = 15;
    Gmaps.map.initialize();
    Gmaps.map.markers = <%=raw @json %>;
    Gmaps.map.create_markers();
    Gmaps.map.adjustMapToBounds();
    Gmaps.map.callback();
  };
  Gmaps.loadMaps();
于 2012-11-24T11:12:10.753 回答