我正在使用Node.js,Express,Chart.js和EJS模板。我想要一个通过变量和对象列表传递的模板。每个对象都定义了Chart.js在网页中呈现的图表。EJS内联DOM选择器未定义
chart.js之要求您从一个变量,你作为参数传递给new Chart()
,但在下面的代码,我EJS引用document
它得到一个错误说这是在引用时未定义的DOM存储画布它。我怎样才能解决这个问题?
<div class='report-content'>
<!-- 'reportSheet' is a variable passed in from the Express route definition. -->
<!-- for each chart object in the list of charts... -->
<% reportSheet.forEach(function(chart){ %>
<!-- create area for that chart -->
<div class="chart-region">
<div class="chart-item">
<h3>Chart Title</h3>
<canvas id="myChart" width="400" height="200"></canvas>
<% var ctx = document.getElementById("myChart"); %>
<% var myChart = new Chart(ctx, chart); %>
</div>
</div>
<% }); %>
</div>
下面是根据chart.js之文档的示例的方式来建立的图表:
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
// The type of chart we want to create
type: 'line',
// The data for our dataset
data: {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [{
label: "My First dataset",
backgroundColor: 'rgb(255, 99, 132)',
borderColor: 'rgb(255, 99, 132)',
data: [0, 10, 5, 2, 20, 30, 45],
}]
},
// Configuration options go here
options: {}
});
</script>
对于一些上下文:点为用户能够查看网页并像仪表板一样添加新图表,因此数据库ne编辑存储他们为仪表板制作的每张图表的清单。
感谢您的任何帮助。
让我告诉你一件事.... EJS的模板引擎,运行在后端....你不能把关于文件的后台...你可以做的是使用JavaScript的EJS其打印将运行在客户端....或者使ajax调用服务器来获取数据并使用chartjs制作图表 – Tolsee
感谢您的建议Tolsee。它帮助我意识到我需要AJAX。我对web dev很陌生。我已在下面发布我的解决方案。 – Inertia