0

Я использую версию Rails 3.0.9 и jquery. Я использую этот камень без базы данных. Он используется только для отображения карты и отображения на нем файла KML. Для этого я использовал:Обновить div с gmaps4rails (AJAX)

<div id='ajax_map'> 
    <% @kmlurl="http://mysite/file1.kml" %> 
    <%= gmaps(:kml => { :data => "[{ url: #{@kmlurl.inspect}}]" }) %> 
</div> 

Все отличные шоу.

Я хочу сделать это после того, как вы измените ссылки (@ kmlurl), и нажмите кнопку, обновленная карта с этим новым KML-файлом. Я использую отдельное действие js.erb со следующим кодом:

$('#ajax_map').html('<%= @kmlurl="http://mysite/file2.kml" %>'+'<br />'+'<%= gmaps(:kml => { :data => "[{ url: #{@kmlurl.inspect}}]" }) %>'); 

Но он не обновляет DIV. «js.erb» отображается нормально, без использования метода gmaps() он обычно возвращает @ kmlurl. Я тестировал этот же код в «.html.erb» в тегах, он загружает новый файл, но, конечно же, только когда страница загружается. Как я могу решить эту проблему?

ответ

1

Решил проблему следующим образом (в js.erb):

$('#ajax_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.kml = [{ url: '<%= "#{@kmlurl}" %>'}]; 
Gmaps.map.create_kml(); 
    Gmaps.map.adjustMapToBounds(); 
    Gmaps.map.callback(); 
}; 
Gmaps.loadMaps(); 
0

Сначала я бы немного переработал вещи.

Скажите, что первый бит кода находился на вашей индексной странице. Я бы переместить установку @kmlurl в соответствующие действия контроллера:

def index 
    @kmlurl = "http://mysite/file1.kml" 
end 

Тогда (предполагая, что индекс?) Ваше мнение индекс будет просто:

<div id="ajax_map"> 
    <%= gmaps(:kml => { :data => "[{ url: #{@kmlurl}}]" }) %> 
</div> 

Затем добавить ссылку, которая будет обновляться карта:

<%= link_to 'Other Map', '/othermap', :remote=>true %> 

Теперь вы бы создать маршрут в routes.rb:

match '/othermap' => 'foo#othermap' 

Тогда в foo_controller.rb:

def othermap 
    @kmlurl = "http://mysite/file2.kml" 
end 

Затем создать othermap.js.erb:

$('#ajax_map').html(
    '<%= 
    escape_javascript(
     gmaps(:kml => { :data => "[{ url: #{@kmlurl}}]" }) 
    ) 
    %>' 
) 

Это быстро исправить, но то, что я бы на самом деле будет стремиться сделать свой вид, как код как можно проще, и выполнять всю реальную работу в контроллере. В идеале, ваш взгляд будет выглядеть так:

<div id="ajax_map"> 
    <%= gmaps(:kml => { :data => @mapdata }) %> 
</div> 

настроить @mapdata в соответствии с вашим контроллером. У вас слишком много материала, который действительно принадлежит контроллеру, встроенному в ваш код просмотра! Ваш othermap.js.erb должен быть одинаково упрощен. т.е.

$('#ajax_map').html('<%= escape_javascript(gmaps(:kml => { :data => @mapdata }))%>') 
+0

Спасибо за ответ, но проблема осталась прежней, и ничего принципиально не изменилось. Когда вы нажимаете на ссылку и вызываете «othermap», карта не отображается. Это не работает с вызовом функции (gmaps()) в js.erb. – OLMER

Смежные вопросы