javascript - JSReport - 图表未使用动态值呈现

标签 javascript node.js reactjs reporting jsreport

我能够使用 JSReport 脚本通过 REST API 获取数据。我能够使用带有硬编码值的模板引擎(配方:html,引擎: Handlebars )显示饼图。现在我必须将动态数据从 JSreport 脚本传递到模板引擎。我不知道该怎么做。

脚本

async function prepareDataSource() {
    const extracts = await fetchStats() . // REST API Call
   // console.log(extracts.data);
    let arr = extracts.data
     let statsbySale = d3.nest()
                .rollup(function(d) {
                    return {
                    A : d3.sum(d, function (g) { return g.a; }),
                    B : d3.sum(d, function (g) { return g.b; }),
                    C : d3.sum(d, function (g) { return g.c; }),
                    D : d3.sum(d, function (g) { return g.d; })
                };
                }).object(arr);
                console.log(JSON.stringify(statsbySale)); ==> returns ["A" : 10, "B" : 20, "C" : 30, "D" : 40]
                return (JSON.stringify(statsbySale))
}


async function beforeRender(req, res, done) {
     req.data.sales = await prepareDataSource()
     console.log(req.data.sales======>Printed the same JSON object as above
     done();
}

==================================

Template engine

<script>
    Chart.defaults.global.legend.display = false;
    new Chart(document.getElementById('myChart').getContext("2d"),            
        type: 'pie',
        data: {
             labels: ['A', 'B', 'C', 'D'],
             datasets: [{
                  backgroundColor: [
                      'green',
                      'orange',
                      'yellow',
                      'purple'
                  ]                
                  borderColor: "rgba(27,161,226,1)",
                  borderWidth: 1,
                  hoverBackgroundColor: "rgba(27,161,226,0.4)",
                  hoverBorderColor: "rgba(27,161,226,1)",
                  data: [10,20,30,40] ===>Hardcoded value
                }]
        },
        options: {
             animation: {
                 duration:            
             }
        }
});
</script>

如何将动态值从脚本文件传递到模板引擎以正确渲染图表。

最佳答案

解决办法可参见here

您需要使用自定义模板引擎助手序列化 json 数据并将它们写入内联脚本。

定义自定义助手

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

将数据写入内联脚本

<script>
  var data = {{{toJSON sales}}}
  ... your chart using data
</script>

关于javascript - JSReport - 图表未使用动态值呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53479185/

相关文章:

javascript - ReactJs搜索按钮在fetch之前重新加载页面可以获取图像链接并显示它们

node.js - 如何使用 Heroku/RedisCloud/Node.js 远程检查数据

ios - React Native 中的 Native Base Deck Swiper

javascript - ReactJS - 获取函数: Why am I getting uncaught (in promise) SyntaxError: Unexpected end of JSON input?

javascript - 如何在jest和enzyme中设置useState Hook的初始状态?

javascript - 从 iframe 获取 div 值

javascript - 对箭头函数感到困惑

javascript - 如何在事件处理程序内执行安全的异步操作,防止不一致?

node.js - 为什么 "npm install"删除了node_modules中的所有包?

node.js - 创建文档时触发云函数时获取 "Object possibly undefined"