我目前正在制作一个Web应用程序,用户可以在其中添加自己的图表面板,然后可以将某些数据库表拖到所述面板中以使其显示在图表中。我的问题是我无法将数据集推送到动态创建的图表中,因为保存图表的变量没有直接写在文档中,所以我用来推送这些数据集的函数无法像这样推送到变量通常。
这里是制作新面板和图表的功能:
function addnewchart(x) {
eval("ctx" + x + "= document.getElementById('linechart" + x + "').getContext('2d');");
eval("var lineChart" + x + " = new Chart(ctx" + x + ", {type: 'line',data: {labels: '',datasets: ''},options: {legend: {display: false},scales: {xAxes: [{gridLines: {display: false},scaleLabel: {display: true,labelString: ''}}],yAxes: [{ticks: {beginAtZero: true},scaleLabel: {display: true,labelString: ''}}]}}});");
};
这是将数据集推送到那些图表的功能:
function addData(chart, Datalabel, Tabledata) {
datasintable.push(Tabledata + "S");
var curColor = randomColor();
var newDataset =
{
label: Datalabel,
fill: false,
backgroundColor: curColor,
borderColor: curColor,
data: Tabledata
}
console.log(chart,Datalabel,Tabledata, newDataset);
chart.data.labels.push(['test1', 'test2', 'test3', 'test4', 'test5']);
chart.data.datasets.push(newDataset);
chart.update();
}
我应该如何解决这个问题?
显然,解决此问题的方法不是在addData()中使用可变图表,而是在处理动态创建的图表时使用window[chartname + index]
。我通过尝试同时使用eval()和window []指向图表发现了这一点。 Eval根本不起作用,但是Window成功了。
示例:
var number = 1;
window['linechart' + number];
这将调用图表折线图1。