0

map_pointsを使用して、現在の場所のマーカーをバックエンドからのいくつかと一緒にgmaps4railsマップに追加する方法を理解しようとしてい@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 配列を引数としてto_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 に答える