簡體   English   中英

如何在jsreport的圖表中使用自定義數據?

[英]How to use custom data in my chart on jsreport?

我正在嘗試使用jsreport中的自定義數據制作一些圖表,並使用Chart.js,問題是我不知道如何使用自定義數據來填充我的圖表。 到目前為止,我用我的數據和生成圖表並將其放置在畫布中的函數創建了一個非常大的json,但是我無法使用車把調用html內的函數,因為它表示未定義文檔。 那么,如何使用我的數據創建圖表並顯示在畫布中?

PS:我可以輕松地顯示帶有靜態數據的圖表,但是我真的很想使用我創建的json來做到這一點。

我創建圖表的功能:

function graficoEstiloAdaptado(exame){
    var ctx = document.getElementById('graficoEsquerdo').getContext('2d');

    var total = 280;
    var incentivador = 0;
    var idealizador = 0;
    var detalhista = 0;
    var sociavel = 0;

    for(var i=0;i<exame.respostas.length;i++){
        for(var j=0;j<exame.respostas[i].alternativas.length;j++){
            switch(exame.respostas[i].alternativas[j].categoria){
                case 'Incentivador':
                    incentivador += 4-j;
                    break;
                case 'Idealizador':
                    idealizador += 4-j;
                    break;
                case 'Detalhista':
                    detalhista += 4-j;
                    break;
                case 'Sociável':
                    sociavel += 4-j;
                    break;
            }
        }
    }

    var porcentagens = {
        incentivador: (incentivador/total).toFixed(1),
        idealizador: (idealizador/total).toFixed(1),
        detalhista: (detalhista/total).toFixed(1),
        sociavel: (sociavel/total).toFixed(1)
    };

    var chartEstiloAdaptado = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: [porcentagens.incentivador + "%", porcentagens.idealizador + "%", porcentagens.detalhista + "%", porcentagens.sociavel + "%"],
            datasets: [{
                label: "Gráfico I",
                data: [
                   porcentagens.incentivador,
                   porcentagens.idealizador,
                   porcentagens.detalhista,
                   porcentagens.sociavel
                ]
            }]
        },
        options: {
            animation: {
                onComplete: function() {
                    window.JSREPORT_READY_TO_START = true;
                }
            }
        }
    });
}

而且我還不想使用API​​來獲取數據,我只想按自己喜歡的方式來構造報告,然后再使用API​​來獲取數據。

博客描述了主要思想:

定義幫助函數,該函數根據參數生成JSON字符串

 function toJSON(data) { return JSON.stringify(data); } 

並用內聯腳本調用此幫助器

 <script> var data= {{{toJSON this}}} </script> 

chart.js的完整示例如下所示

<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.min.js'></script>
  </head>
  <body>

    <canvas id='myChart' style="margin-top:30px"></canvas>

    <script>
    var ctx = document.getElementById('myChart').getContext('2d');
    var myChart = new Chart(ctx, {
      type: 'line',
      data: {
        labels: ['M', 'T', 'W', 'T', 'F', 'S', 'S'],
        datasets: [{
          label: 'apples',
          data: {{{toJSON A}}},
          backgroundColor: "rgba(153,255,51,0.4)"
        }, {
          label: 'oranges',
          data: {{{toJSON B}}},
          backgroundColor: "rgba(255,153,0,0.4)"
        }]
      },
      options: {
            animation: {
                onComplete: function () {
                    // set the PDF printing trigger when the animation is done
                    // to have this working, the phantom-pdf menu in the left must
                    // have the wait for printing trigger option selected
                    window.JSREPORT_READY_TO_START = true
                }
            }
        }
    });
    </script>    
  </body>
</html>

可以在此處找到工作場演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM