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.
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
@eric incolla l'html generato della pagina dei risultati. – Abid
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