Google Charts в Rails 3.1 Ajax Partial - PullRequest
6 голосов
/ 19 января 2012

Я работал с диаграммами Google без проблем, но теперь я дошел до того, что мне нужно отобразить диаграмму внутри частичного рендеринга Ajax.

Очевидно, что ничего не показывает.Я знаю, что это как-то связано с триггером Java, чтобы построить диаграмму не активированной, но мне нужна некоторая помощь с тем, что именно мне нужно делать ...

В настоящее время у меня есть что-то подобноеАякс):

 <html>
  <head>
    <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 data = new google.visualization.DataTable();
        data.addColumn('string', 'Year');
        data.addColumn('number', 'Sales');
        data.addColumn('number', 'Expenses');
        data.addRows([
          ['2004', 1000, 400],
          ['2005', 1170, 460],
          ['2006', 660, 1120],
          ['2007', 1030, 540]
        ]);

        var options = {
          width: 400, height: 240,
          title: 'Company Performance',
          vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
        };

        var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div"></div>
  </body>
</html>

Ответы [ 2 ]

8 голосов
/ 02 мая 2012

На главной странице сохраните эти данные (нет необходимости загружать диаграммы Google в частичном формате):

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load("visualization", "1", {packages:["corechart"]});
</script>

В вашей части вы должны сделать что-то вроде ниже (при условии, что вы используете jQuery). Смысл в том, чтобы выполнить код js после , когда загружен dom, что и делает $ (function () {....}):

<div id="chart_div"></div>
<script type="text/javascript">
  $(function() {
    drawChart();
  });

  function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Year');
    data.addColumn('number', 'Sales');
    data.addColumn('number', 'Expenses');
    data.addRows([
      ['2004', 1000, 400],
      ['2005', 1170, 460],
      ['2006', 660, 1120],
      ['2007', 1030, 540]
    ]);

    var options = {
      width: 400, height: 240,
      title: 'Company Performance',
      vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
    };

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

Использование библиотеки, такой как jQuery, сэкономит вам много часов несоответствий браузеров для того, чтобы знать, когда dom загружен правильно.

0 голосов
/ 19 мая 2012

Замена

google.setOnLoadCallback(drawChart);

с

$(function() {
   drawChart();
});

сделал трюк для частичек AJAX! Спасибо за помощь, ранее DOM перезагружался, но диаграммы не вставлялись.

...