0

我试图在我的 Rails 应用程序中包含一个谷歌饼图,我遇到了一个我认为特别奇怪的错误。

问题是,当我输入数字时,图表显示完美(将我的两个输入数字显示为饼图的两个组成部分,等于它们的总和),但是当我尝试为其提供动态数据时,它似乎 PICK UP 数据但是不要正确使用它——而是在空白图表中将这两个数字显示为条子。代码示例:

这完美地工作,变成了具有正确值的漂亮饼图(已售出和左侧,下图):

<div id="chart_div"></div>

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var sold = 406;
    var left = 38; 
    var data = google.visualization.arrayToDataTable([
      ['Pounds', 'Sold/Left'],
      ['Pounds Sold', sold],
      ['Left', left]
    ]);

    var options = {

    };

    var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

然而,这会生成一个带有悬停的图表,显示(在这种情况下)完全相同的数字(406 和 38),但两个图表部分非常小,约占图表交易量的 1%(与理想的 100%)。剩下的 99% 的图表是空白的:

<div id="chart_div" data-sold=<%= @animal.pounds_sold.to_i %> data-left=<%= @animal.pounds_left.to_i %> ></div>
// Here, the numbers equal 406 and 38, as in the above. 

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var sold = $(document).find('#chart_div').attr('data-sold');
    var left = $(document).find('#chart_div').attr('data-left');
    var data = google.visualization.arrayToDataTable([
      ['Pounds', 'Sold/Left'],
      ['Pounds Sold', sold],
      ['Left', left]
    ]);

    var options = {

    };

    var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

一个可能的线索是,当我将鼠标悬停在此错误图表中的部分上时,虽然悬停显示正确的数字(406、38),但它表示这些部分分别仅占饼图的 1% 和 0.2%,即使其余部分饼图是空白的(并且没有悬停/悬停值)。

有什么想法吗?我猜我犯了一些 javascript/jquery 罪行,因为我对它很陌生,但我不知道是什么。

谢谢!

编辑——另一个奇怪的事情。我试图看看在动态数字和直数的混合场景中会发生什么,即对上面的动态版本进行以下修改:

...
var other = 50;
var sold = $(document).find('#chart_div').attr('data-sold');
var left = $(document).find('#chart_div').attr('data-left');
var data = google.visualization.arrayToDataTable([
  ['Pounds', 'Sold/Left'],
  ['Pounds Sold', sold],
  ['Left', left],
  ['Test', other]
]);
...

这(对我来说)莫名其妙地导致根本没有图表。

4

1 回答 1

0

我认为问题在于您将每个条子的“值”指定为字符串。尝试将它们定义为一个INT,你的馅饼应该可以工作

于 2013-02-18T10:35:43.033 回答