使用gmaps4rails(AJAX)刷新div

时间:2012-05-06 23:59:43

标签: ruby-on-rails ruby-on-rails-3 google-maps google-maps-api-3 gmaps4rails

我正在使用Rails 3.0.9版本和jquery。 我一直在使用没有数据库的这个gem。它仅用于地图显示,并在其上显示KML文件。为此我用过:

<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”中测试了相同的代码,它加载了一个新文件,当然,只是在页面加载时。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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 } ))%>')