将包含数据的数组传递给Google Chart Tools

时间:2012-08-13 18:45:06

标签: javascript ruby ruby-on-rails-3 google-visualization

我正在尝试使用Google Chart Tools绘制图表。

  google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('number', 'Month');
    data.addColumn('number', 'Money');
    data.addRows([
        [<%= @months %>, <%= @money %>] 
        ]);

    var options = {
      title: 'Title'
    };

    var chart = new google.visualization.LineChart(document.getElementById('chart_div_2'));
    chart.draw(data, options);
  }

@months和@money是数组。不幸的是,我可能无法以这种方式传递数组,因为图表没有显示出来。处理这种情况的权利是什么?

更新

好的,我在for循环中使用了Gon和setCell函数,它可以正常工作

2 个答案:

答案 0 :(得分:0)

使用json。 respond_to块可用于此目的。返回包含数据值数组的json哈希。

def months_monies
  respond_to |format|
    format.json {render :json => @post}
    # The post is a Ruby hash that gets converted into json string
    format.html #months_monies.html.erb
  end
end

考虑@post变量的示例,例如{:a => {"January" => 1000}, :b => {"April" => 1222}}

可以通过对http://localhost:3000/months_monies.json

进行AJAX调用从javascript块访问此内容

使用jQuery的示例:

$.get("http://localhost:3000/controller/months_monies.json",function(post){
  post.a.January # => 1000
  post.b.April   # => 1222
});

如果@post变量是一个数组(在您的情况下可能是最可能的情况),该方法几乎相似。说@post = [{'january' => 1000}, {'february' => 1111}]

然后,您可以使用post[0].januarypost[1].february来获取$.get块中的值。

希望有所帮助。

答案 1 :(得分:0)

在我的问题中,我展示了一个将ruby数组传递给Google chart api的工作示例。 (我的问题与在Ruby中指定缺少/ null系列值有关,这似乎不会影响您的问题。)

using google chart api in rails app - how specify a null (missing) value in a series when using arrayToDataTable