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