Как вы используете gmaps4rails для отправки вызова ajax с использованием UJS в Ruby on Rails?

Я следовал примерам в двух местах:

но они оба не работают. Я ничего не получаю обратно ни за то, ни за другое. В настоящее время я использую версию 1.5.5 gmaps4rails в RoR 3.2.8.

show_map.js.erb

$('#map_container').show();
$('#map_container').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.create_markers();
  Gmaps.map.adjustMapToBounds();
  Gmaps.map.markers = <%= @json %>;
  Gmaps.map.callback();
};
Gmaps.loadMaps();

users_controller.rb

  def show_map
    @user = User.first
    @json = @user.to_gmaps4rails
    respond_to do |format|
      format.js {}
    end
  end

show.html.haml

  = link_to "Map", show_map_path, :remote => true
  #map_container{:style => 'display:none;'}

Спасибо за вашу помощь!


person perseverance    schedule 14.10.2012    source источник
comment
точно следуйте моей сути, это сработает   -  person apneadiving    schedule 14.10.2012
comment
Проблема здесь в том, что вы включаете часть gmaps через javascript. Нет проблем для html, но зависимости js таким образом не включаются.   -  person apneadiving    schedule 14.10.2012


Ответы (1)


У меня та же проблема, что и у @persistence, и я предпочитаю сообщить об этом в этой теме. Сначала я пытался следовать как примеру вики, а затем придерживался комментария @apneadiving и следовал вашей сути, но все же я что-то упускаю из сути. Я помещаю этот код в свой контроллер:

Контроллер_событий

def index
    @json = Event.all.to_gmaps4rails do |event, marker|
        marker.title        event.title
        marker.infowindow   event.description
        marker.sidebar      'This is a side bar'
    end
    p @json
    respond_with @json
end

И, на мой взгляд, я вставляю точный код сути. Когда я нажимаю кнопку загрузки, я проверяю в консоли, что моя информация json в порядке, но карта не загружается из-за ошибки Javascript:

TypeError: Gmaps.map is undefined

Я предполагаю, что мне не хватает какой-то Javascript-инициализации карты?

ОБНОВЛЕНО 11.05.2012:

Это действительно была проблема. Объединив javascript из примера gist и wiki, я сделал эту работу, поместив следующий код в представление:

просмотр_индекса

<!-- create html + load js files but don't create map itself: will be done after ajax call -->
<%= gmaps({:last_map => false}) %>
<br/>

<!-- button to trigger ajax call -->
<button type="button" id="ajax">Load Map</button>

<script type="text/javascript" charset="utf-8">
$(function() {

    //hide the empty container
    $(".map_container").hide();

    // Map initialization
    Gmaps.map = new Gmaps4RailsGoogle();
    Gmaps.load_map = function() {
         Gmaps.map.map_options.maxZoom = 15;
         Gmaps.map.initialize();
         Gmaps.map.create_markers();
         Gmaps.map.adjustMapToBounds();
         Gmaps.map.callback();
    };

    $("#ajax").click(function(){
         $.getJSON('/events', function(json){
              $(".map_container").show();
              Gmaps.loadMaps();
              Gmaps.map.addMarkers(json);
         })
    })
});
</script>

Я также оставил несколько простых примеров загрузки карт Gmaps4Rails в GitHub: https://github.com/daviddefco/Gmaps4RailsSamples.git

  1. Использование и частичный HTML
  2. Использование запроса AJAX, вызванного кнопкой HTML (основной пример)
  3. Использование запроса AJAX внутри действия Javascript (пример из вики)

Я новичок в RoR и Javascript, поэтому комментарии или улучшения кода приветствуются.

person davidfm    schedule 31.10.2012
comment
Вау, спасибо, что выложили образцы! Хотя мне все еще потребовалось некоторое время, чтобы понять, что происходит, нет ничего лучше рабочего примера, на который можно было бы сослаться! Apneadiving можешь кинуть ссылку на примеры Дэвида в вики? Я думаю, что это может сэкономить время некоторым людям. - person SteveO7; 27.12.2012