gpt4 book ai didi

第二次调用函数绘制图表时出现Amcharts5错误

转载 作者:行者123 更新时间:2023-12-05 01:55:22 29 4
gpt4 key购买 nike

我调用此函数将饼图绘制到模态窗口内 ID 为“animating-donut”的 div。

第一次成功,但第二次点击时出现这些错误,图表未显示

  1. Uncaught Error :同一个 DOM 节点上不能有多个根
  2. 未捕获的类型错误:无法读取未定义的属性(读取“_display”)

无论如何,即使有这些错误,我也不认为这些错误会导致图表无法像第一次显示时那样第二次显示 -

谢谢

这是我的功能

function donutam(donutdatalabel,donutdataseries){
//Pie View;
root = am5.Root.new("animating-donut");

// Set themes
root.setThemes([
am5themes_Animated.new(root)
]);


// Create chart
var chart = root.container.children.push(am5percent.PieChart.new(root, {
layout: root.verticalLayout
}));


// Create series
var series = chart.series.push(am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category"
}));


// Set data
var serie = donutdataseries.split(',');
var labels = donutdatalabel.split(',');
var seriesarr = [];
for (i = 0; i < serie.length; i++) {
seriesarr[i] = {value: serie[i], category: labels[i]};
}

series.data.setAll(seriesarr);


// Create legend
var legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.percent(50),
x: am5.percent(50),
marginTop: 15,
marginBottom: 15,
}));

legend.data.setAll(series.dataItems);


// Play initial series animation
series.appear(1000, 100);

最佳答案

您试图在处理当前驻留在容器中的旧元素之前在容器中创建一个新的根元素,将导致错误。如果我们没有对先前创建的根元素的引用,我们可以在 am5.registry.rootElements 中找到它,它是一个包含所有根元素的数组。

function maybeDisposeRoot(divId) {
am5.array.each(am5.registry.rootElements, function (root) {
if (root.dom.id == divId) {
root.dispose();
}
});
};

function donutam(donutdatalabel,donutdataseries){
//Pie View;
maybeDisposeRoot("animating-donut");
root = am5.Root.new("animating-donut");

// Set themes
root.setThemes([
am5themes_Animated.new(root)
]);


// Create chart
var chart = root.container.children.push(am5percent.PieChart.new(root, {
layout: root.verticalLayout
}));


// Create series
var series = chart.series.push(am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category"
}));


// Set data
var serie = donutdataseries.split(',');
var labels = donutdatalabel.split(',');
var seriesarr = [];
for (i = 0; i < serie.length; i++) {
seriesarr[i] = {value: serie[i], category: labels[i]};
}

series.data.setAll(seriesarr);


// Create legend
var legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.percent(50),
x: am5.percent(50),
marginTop: 15,
marginBottom: 15,
}));

legend.data.setAll(series.dataItems);


// Play initial series animation

关于第二次调用函数绘制图表时出现Amcharts5错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70256624/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com