2012-05-02 16 views
7

Sto cercando di creare una pagina Web per visualizzare grafici a linee nell'applicazione Ruby on Rails 2.3.14. Ho trovato uno strumento, chiamato JS Charts, che mi permette di creare grafici piacevoli usando Javascript, ma ho difficoltà ad inviarlo i dati di cui ha bisogno. Ecco il modo per fare un grafico lineare statico:Come passare un array Ruby a Javascript per creare un grafico lineare

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

ho messo il codice in stats.html.erb, e si presenta. Tuttavia, mi serve per visualizzare i dati del grafico a linee che fornisco. Un array bidimensionale 2 viene creato nel controllore:

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

dovrei essere in grado di utilizzare tale variabile nella vista, e impostare var myData ad esso, con qualcosa come:

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

Ho provato altre cose Mi piace:

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

ma niente sembra funzionare. C'è qualcosa che posso fare?

EDIT:

C'era un problema con l'array controller passato nella vista (@a), che era vuoto. Sono stato in grado di utilizzare:

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

per visualizzare il grafico a linee con i dati corretti passati nella vista.

+0

Buona domanda. Non sono sicuro del motivo per cui i tuoi esempi non funzionino, partendo dal presupposto che sei in un file .erb e che l'interpolazione di ruby ​​può funzionare. Forse provi a interpolare in una stringa? IE '<%= @.to_s %>', perché il javascript sta per valutare quale ruby ​​inietta nello script come se lo aveste digitato in ... – Andrew

+0

@eric incolla l'html generato della pagina dei risultati. – Abid

+0

Aspetta, in qualche modo ha funzionato questa volta. Penso che ci sia stato un problema con i dati che il controller ha passato nella vista ('@ a'). Ho usato 'JSON.parse (" <% = @ a.to_json%> ");'. Apprezzo almeno le risposte. – Eric

risposta

8

Sembrano è come avete capito bene di lavoro, ma si può pulire le cose un po ':

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

o in Rails 3 si può essere super savy HTML5 e utilizzare i data aiutanti per aggiungere i tuoi dati come un att di alcuni tag html:

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

e poi in poi in javascript (con jQuery):

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

e per i super acuti, controlla this railscast

Problemi correlati