2011-05-09 62 views
7

我试图在<%=%>标记中使用插入Javascript变量,但它会输出变量名verbose。这里是我的代码Ruby on rails:在Html.erb中使用javascript变量<%= %>标签

<script> 
    function getGraph(agency,device_id) 
     { 
      var i = document.createElement('img'); 
      i.src = '<%= show_graph_hcfcd_url('device_id') %>'; 
      $(graphDiv).appendChild(i); 
     } 
</script> 

现在的问题是URL获取生成就好,除了代替DEVICE_ID的价值,“DEVICE_ID”出现在其他网址。

任何线索如何克服?

+0

你可以显示show_graph_hcfcd_url的来源吗? – 2011-05-09 18:35:26

+0

删除引号。如果它是一个字符串变量,则不会用引号括起来。 – 2011-05-09 18:39:22

+0

@Bryan Drewery:show_graph_hcfcd_url的代码是好的,它的工作原理。我已经单独测试了网址。问题是生成正确的网址。 – Shaunak 2011-05-09 18:41:02

回答

9

<%= %>将解释服务器

上的代码和JavaScript变量可用于更改客户端上。这样做

<%= show_graph_hcfcd_url('device_id') %> 

可能不是这样做的正确方法。

你可能想尝试把网址中的元素的数据attibute:

<div id="device_id" data-url="<%= show_graph_hcfcd_url(@device.id) %>">...</div> 

<script> 
    function getGraph(agency,device_id) 
     { 
      var i = document.createElement('img'); 
      i.src = $(device_id).data("url"); 
      $(graphDiv).appendChild(i); 
     } 
</script> 

也看到

http://railscasts.com/episodes/324-passing-data-to-javascript

有一个很好的宝石做这个叫“坤”

2

下面是我已经解决了这个现在:

<script> 
    function getGraph(agency,device_id) 
     { 

      var i = document.createElement('img'); 
      var url = '<%= show_graph_hcfcd_url('device_id') %>'; //new change 
      url = url.replace('device_id',""+(device_id*1000)); //new change 
      i.src = url; 
      $(graphDiv).innerHTML = ""; 
      $(graphDiv).appendChild(i); 
     } 
    </script> 

的大胆演出,我所做的线条。基本上用它的值替换了url中的“device_id”。

但我仍然希望有一个更优雅的解决方案。

+1

我不认为这个问题有一个优雅的解决方案。我的解决方案是用根URL替换实际的URL,并追加路径和参数:'var url =“<%= root_url%> graph_hcfcd /”+ device_id;' – Shevaun 2012-10-12 04:23:48