2011-05-09 38 views
7

Estoy tratando de usar inserte una variable Javascript en las etiquetas <% =%> pero imprime el nombre de la variable verbose. Aquí está mi códigoRuby on rails: usando la variable javascript en <%= %> etiquetas en Html.erb

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

Ahora el problema es el URL se genera muy bien excepto que en lugar del valor de device_id, 'device_id' aparece en la URL de descanso.

¿Alguna pista sobre cómo superar esto?

+0

¿Puedes mostrar la fuente de show_graph_hcfcd_url? –

+0

Eliminar las comillas. Si es una variable de cadena, no la rodearía con comillas. –

+0

@Bryan Drewery: el código de show_graph_hcfcd_url está bien y funciona. He probado la URL por separado. El problema es generar la URL correcta. – Shaunak

Respuesta

9

<%= %> interpretará el código en el servidor

y javascript variable está disponible para cambiar en el cliente. Así que al hacer

<%= show_graph_hcfcd_url('device_id') %> 

probablemente no sea la forma correcta de hacerlo.

Es posible que desee para tratar de poner la url (s) en el attibute de datos del elemento:

<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> 

también ver

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

Hay una buena gema para hacer esto se llama "gon"

2

Aquí es cómo han resuelto este por ahora:

<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> 

Las líneas en negrita el espectáculo lo que hice. Básicamente reemplazó el "device_id" en la url con su valor.

Pero todavía estoy esperando una solución más elegante.

+1

No creo que haya una solución elegante para este problema. Mi solución fue reemplazar la url real con la url raíz y anexar la ruta y el parámetro: 'var url =" <% = root_url%> graph_hcfcd/"+ device_id;' – Shevaun

Cuestiones relacionadas