Проблемы с Gmaps.map.replaceMarkers: Gmaps.map не определен

Я пытаюсь динамически изменять маркеры в Gmaps4Rails на основе формы поиска пользователя. Я использую код ниже.

Проблема, с которой я сталкиваюсь, заключается в том, что вызов Gmaps.map.replaceMarkers внутри $('#locations_search').submit дает ошибку: Gmaps.map не определен.

Я проверил с помощью отладчика javascript, и действительно, как только я вхожу в функцию отправки (у меня там есть точка останова), 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;
  });
}

Большое спасибо!


person user1479629    schedule 26.08.2012    source источник


Ответы (1)


Это всего лишь вопрос порядка сценария.

Gmaps.map создается в вашем представлении, когда вы вызываете помощников gmaps или 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;
  });
}
person apneadiving    schedule 26.08.2012
comment
Спасибо за быстрый ответ! Можете ли вы уточнить это, я все еще не мог заставить его работать, к сожалению. Что вы имеете в виду, говоря «Добавить свои сценарии после вызова помощников драгоценного камня»? Где это, на мой взгляд? Приведенный выше код находится в моем представлении locations/index.html.erb и в самом конце файла (т.е. после вызова <%= gmaps("markers" => {"data" => @json } ) %> и обернут <% content_for :scripts do %> <script type="text/javascript"> [... my code ...] </script> <% end %> - person user1479629; 27.08.2012
comment
Ммм, думаю, я так и делаю. Ошибка, которую я получаю: Gmaps.map undefined, в строке getJSON... в моем коде выше. - person user1479629; 27.08.2012
comment
не могли бы вы скопировать/вставить html своей страницы в какой-то смысл? - person apneadiving; 27.08.2012
comment
Да так и получается!!!! Вы потрясающие :) Большое спасибо за вашу быструю и добрую помощь! - person user1479629; 27.08.2012