在show.html.erb上动态更新javascript_include_tag

时间:2013-05-01 10:58:30

标签: ruby-on-rails ruby-on-rails-3

所以这是场景:

我在数据库中有4个条目,它们是4个地图路径。

每个地图路线都有自己的XML文件,其中包含每条路线的坐标,我编写了一个ajax函数来从xml中提取数据并将其写入谷歌地图

这是代码

的摘录
$.ajax({                  
 type: 'GET',
 url: '/route4.gpx',            
 dataType: 'xml',             
 success: function(track) {
   var grids = [];         
   var bounds = new google.maps.LatLngBounds ();  
   $(track).find('trkpt').each(function() {       
     var lat = $(this).attr('lat');            
     var lon = $(this).attr('lon');
     var point = new google.maps.LatLng(lat, lon);    
     grids.push(point);                              
     bounds.extend(point);

我将此代码保存到4个javascript文件中,其中每行的URL行不同(route1.gpx,route2.gpx等)

我想要做的是在show.html.erb文件中更改javascript_include_tag以更新为相关的javascript文件

因此show.html.erb标签如下所示

<%= javascript_include_tag  "http://maps.google.com/maps/api/js?sensor=false" ,"http://code.jquery.com/jquery-1.9.1.min.js", "/js/script1.js" =%>

我想要的是当我访问另一个页面时最后一次更改的引用

当链接到show / 1时,javascript文件将是&#34; /js/script1.js"

当链接到show / 2时,javascript文件将是&#34; /js/script2.js"

当链接到show / 3时,javascript文件将是&#34; /js/script3.js"

当链接到show / 4时,javascript文件将是&#34; /js/script4.js"

那么无论如何都要写入javascript_include_tag来实现这个目标吗?

所有帮助/建议/意见赞赏

2 个答案:

答案 0 :(得分:1)

您可以插入传递给javascript_include_tag的字符串,将其作为实例变量等传递,但我认为您正走错了轨道。我会有一个javascript函数,它将url作为参数发出ajax请求。

然后,您将使用该参数调用该函数。你在这里有几个选择。

您可以使用脚本标记动态生成函数调用,即您可以按照

的方式执行操作
 $(function(){
   my_function(<%= @url.to_json %>)
 })

你可以有一个脚本标签,你可以用url设置一个窗口属性,然后再使用它:

 window.map_url = <%= @url.to_json %>

然后在其他地方

 $(function(){
   my_function(window.map_url)
 })

你可以将函数调用作为静态javascript的一部分,但是让它从某些相关DOM元素的data属性中拉出它的参数

 $(function(){
   my_function($('some_element').data('url'))
 })

我通常会选择后者

答案 1 :(得分:0)

为什么不进行插值?

<%= javascript_include_tag  "http://maps.google.com/maps/api/js?sensor=false" ,"http://code.jquery.com/jquery-1.9.1.min.js", "/js/script#{controller_variable_for_example_id}.js" =%>