0

ユーザー検索フォームに基づいて、Gmaps4Railsのマーカーを動的に変更しようとしています。私は以下のコードを使用しています。

私が遭遇している問題は、$('#locations_search')。submit内でGmaps.map.replaceMarkersを呼び出すと、エラーが発生することです。Gmaps.mapは未定義です。

javascript debbugerを使用してチェックしましたが、実際に送信関数に入ると(そこにブレークポイントがあります)、Gmaps.mapは未定義です。Gmaps.map.callbackの最初の行にブレークポイントを設定して停止すると、オブジェクトGmaps.mapが定義されます。

おそらく私は何かが欠けています。ここでいくつかの可変スコープの問題のようですか?

Gmaps.map.callback = function() {

  var firstMarker = Gmaps.map.markers[0];
  var map         = Gmaps.map.map;
  firstMarker.infowindow.open(map, firstMarker.serviceObject);

  $('#locations_search').submit(function () {
    var url = '/locations.json/?' + $(this).serialize();
    $.getJSON(url, function(data){
                Gmaps.map.replaceMarkers(data);
            });
    $.get(this.action, $(this).serialize(), null, 'script');
    return false;
  });
}

どうもありがとう!

4

1 に答える 1

0

スクリプトの順序の問題です。

Gmaps.mapgmapsまたはgmaps4railsヘルパーを呼び出すと、ビューに作成されます。

解決:

  • 宝石のヘルパーに電話した、スクリプトを追加します

  • jsコードをラップする<% content_for :scripts do %> code <% end %>


あなたの見解では:

<%= gmaps(...) %>
<% content_for :scripts do %>
<script type="text/javascript"> 
  Gmaps.map.callback = function() { ... }
</script>
<% end %>

Gmaps.map.callback = function() {

  var namespace   = Gmaps.map;
  var firstMarker = namespace.markers[0];
  var map         = namespace.map;
  firstMarker.infowindow.open(map, firstMarker.serviceObject);

  $('#locations_search').submit(function () {
    var url = '/locations.json/?' + $(this).serialize();
    $.getJSON(url, function(data){
            namespace.replaceMarkers(data);
        });
    $.get(this.action, $(this).serialize(), null, 'script');
    return false;
  });
}
于 2012-08-26T19:10:25.580 に答える