Gmaps.map.replaceMarkers的问题:Gmaps.map未定义

时间:2012-08-26 02:37:24

标签: ruby-on-rails ruby-on-rails-3 gmaps4rails

我正在尝试根据用户搜索表单动态更改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;
  });
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

这只是一个脚本顺序的问题。

Gmaps.map在您的视图中创建时 您可以拨打gmapsgmaps4rails个助手。

解决方案:

  • 在之后添加您的脚本给宝石的帮助

  • 将您的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;
  });
}