2012-05-02 9 views
7

Estoy intentando hacer una página web para mostrar gráficos de líneas en mi aplicación Ruby on Rails 2.3.14. Encontré una herramienta, llamada JS Charts, que me permite crear buenos gráficos utilizando Javascript, pero tengo problemas para enviar los datos que necesita. Esta es la manera de hacer un gráfico de línea estática:Cómo paso una matriz de Ruby a Javascript para hacer un gráfico de líneas

<script type="text/javascript"> 
    var myData = new Array([1, 395], [2, 244], [3, 223], [4, 210], [5, 238], [6, 223], [7, 275], [8, 31]); 
    var myChart = new JSChart('chartcontainer', 'line'); 
    myChart.setDataArray(myData); 
    myChart.draw(); 
</script> 

puse ese código en stats.html.erb, y se nota arriba. Sin embargo, lo necesito para mostrar datos de gráficos de líneas que le proporciono. A 2 matriz bidimensional se crea en el controlador:

>> @a 
=> [[1, 395], [2, 244], [3, 223], [4, 210], [5, 238], [6, 223], [7, 275], [8, 31]] 

yo debería ser capaz de utilizar esa variable en la vista, y establecer var myData a ella, con algo como:

var myData = "<%= @a %>"; 

Probé otras cosas como:

var myData = JSON.parse("<%= @a.to_json %>"); 

pero nada parece funcionar. ¿Hay algo que pueda hacer?

EDIT:

Había un problema con la matriz de controlador pasa a la vista (@a), que estaba vacío. Pude utilizar:

var myData = JSON.parse("<%= @a.to_json %>"); 

para mostrar el gráfico de líneas con los datos correctos que se pasan a la vista.

+0

Buena pregunta. No estoy seguro de por qué tus ejemplos no funcionan, suponiendo que estás en un archivo .erb y la interpolación de ruby ​​puede funcionar. Tal vez intente interpolar a una cadena? IE '<%= @.to_s %>', porque el javascript va a evaluar qué ruby ​​se inyecta en el script como si lo hubiera escrito ... – Andrew

+0

@eric pegue el html generado de la página de resultados. – Abid

+0

Espera, de alguna manera funcionó esta vez. Creo que hubo un problema con los datos que el controlador pasó a la vista ('@ a'). Usé 'JSON.parse (" <% = @ a.to_json%> ");'. Aprecio las respuestas al menos. – Eric

Respuesta

8

Parecen como si tengo trabajo pero se puede limpiar un poco las cosas:

<%= javascript_tag do %> 
    window.myData = <%=raw @a.to_json %>; 
<% end %> 

o en los carriles 3 Puede ser súper Savy HTML5 y utilizar los data ayudantes para añadir sus datos como un att de algunas tag html:

<%= content_tag "div", id: "myDiv", data: {stuff: @a} do %> 
<!-- some html stuff...--> 
<% end %> 

y luego en a continuación en el javascript (con jQuery):

var myData = $('#myDiv').data("stuff") 

y para los súper entusiastas, echa un vistazo a this railscast

Cuestiones relacionadas