2012-05-02 38 views
7

Tôi đang cố gắng tạo trang web hiển thị biểu đồ đường trong ứng dụng Ruby on Rails 2.3.14 của tôi. Tôi đã tìm thấy một công cụ, được gọi là Biểu đồ JS, cho phép tôi tạo các biểu đồ đẹp bằng Javascript, nhưng tôi gặp sự cố khi gửi dữ liệu cần thiết. Đây là cách tạo biểu đồ đường tĩnh:Làm cách nào để chuyển một mảng Ruby sang Javascript để tạo biểu đồ đường kẻ

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

Tôi đặt mã đó vào stats.html.erb và mã này xuất hiện. Tuy nhiên, tôi cần nó để hiển thị dữ liệu biểu đồ đường kẻ mà tôi cung cấp. Một mảng 2 chiều được tạo ra trong bộ điều khiển:

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

tôi nên có thể sử dụng biến trong giao diện, và thiết lập var myData với nó, với một cái gì đó như:

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

tôi đã cố gắng những thứ khác như:

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

nhưng không có gì có vẻ hiệu quả. Tôi có thể làm gì không?

EDIT:

Có một vấn đề với mảng điều khiển thông qua vào view (@a), đó là sản phẩm nào. Tôi đã có thể sử dụng:

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

để hiển thị biểu đồ đường có dữ liệu phải được chuyển vào chế độ xem.

+0

Câu hỏi hay. Tôi không chắc tại sao các ví dụ của bạn không hoạt động, giả sử rằng bạn đang ở trong một tệp .erb và nội suy ruby ​​có thể hoạt động. Có thể thử nội suy thành một chuỗi? IE '<%= @.to_s %>', bởi vì javascript sẽ đánh giá những gì ruby ​​tiêm vào kịch bản như thể bạn đã gõ nó vào ... – Andrew

+0

@eric dán html được tạo ra của trang kết quả. – Abid

+0

Đợi đã, bằng cách nào đó nó hoạt động lần này. Tôi nghĩ rằng có một vấn đề với các dữ liệu điều khiển thông qua vào xem ('@ a'). Tôi đã sử dụng 'JSON.parse (" <% = @ a.to_json%> ");'. Tôi đánh giá cao các phản ứng ít nhất. – Eric

Trả lời

8

Seem của như bạn đã nhận nó làm việc nhưng bạn có thể làm sạch mọi thứ lên một chút:

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

hoặc trong đường ray 3 bạn có thể siêu HTML5 savy và sử dụng data người giúp đỡ để thêm dữ liệu của bạn như một att của một số thẻ html:

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

và sau đó trong sau đó trong javascript (với jQuery):

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

và đối với siêu quan tâm, hãy xem this railscast

Các vấn đề liên quan