【问题标题】:How do I pass a Ruby array to Javascript to make a line graph如何将 Ruby 数组传递给 Javascript 以制作折线图
【发布时间】:2012-05-02 04:17:34
【问题描述】:

我正在尝试制作一个网页以在我的 Ruby on Rails 2.3.14 应用程序中显示折线图。我找到了一个名为 JS Charts 的工具,它允许我使用 Javascript 创建漂亮的图表,但我无法向它发送所需的数据。下面是制作静态折线图的方法:

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

我将该代码放入 stats.html.erb 中,它就会显示出来。但是,我需要它来显示我提供的折线图数据。在控制器中创建了一个二维数组:

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

我应该能够在视图中使用该变量,并将var myData 设置为它,例如:

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

我尝试了其他方法,例如:

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

但似乎没有任何效果。有什么我可以做的吗?

编辑:

控制器传递给视图 (@a) 的数组存在问题,该数组为空。我能够使用:

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

显示折线图,并将正确的数据传递到视图中。

【问题讨论】:

  • 好问题。我不确定为什么您的示例不起作用,假设您在 .erb 文件中并且 ruby​​ 插值可以工作。也许尝试插入到字符串? IE &lt;%= @.to_s %&gt;,因为 javascript 会评估 ruby​​ 注入脚本的内容,就好像你已经输入了它一样......
  • @eric 粘贴生成的结果页html。
  • 等等,这一次不知何故奏效了。我认为控制器传递给视图的数据存在问题 (@a)。我用JSON.parse( "&lt;%= @a.to_json %&gt;" );。至少我很欣赏这些回复。

标签: javascript ruby-on-rails json graph


【解决方案1】:

看起来你已经成功了,但你可以稍微清理一下:

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

或者在 Rails 3 中,您可以精通 HTML5,并使用 data 助手将您的数据添加为某个 html 标记的 att:

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

然后在javascript中(使用jQuery):

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

对于超级热心的人,请查看this railscast

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2014-01-10
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多