Chart.js技术问题:如何调用未命名图表的update方法?
解决
chart.update is not a function的问题 你猜的完全对!这个错误就是因为你在jQuery对象上调用了update(),而不是Chart.js生成的图表实例本身的方法。当初始化这些图表的时候,你没有保存每个实例的引用,所以现在没法直接调用它们的方法。下面给你两种简单的解决办法:
方法一:用数组保存所有图表实例
初始化图表时,把每个生成的Chart实例存入一个数组,之后通过匹配DOM元素找到对应的实例:
// 初始化时保存所有图表实例到数组 var chartInstances = []; var $charts = $('.chart'); $charts.each(function() { var chart = new Chart($(this), {...}); chartInstances.push(chart); }); // 要更新.chart-one时,找到对应的实例 var $targetChart = $('.chart-one'); var targetInstance = chartInstances.find(function(chart) { // 匹配图表实例对应的canvas元素 return chart.canvas === $targetChart[0]; }); // 确保找到实例后调用update if (targetInstance) { targetInstance.update(); }
方法二:把实例绑定到DOM元素的data属性
这种方法更直观,每个DOM元素和对应的图表实例直接绑定,不用额外维护数组:
var $charts = $('.chart'); $charts.each(function() { var $this = $(this); var chart = new Chart($this, {...}); // 将实例存入当前DOM元素的data属性 $this.data('chartInstance', chart); }); // 更新.chart-one时,直接从data中取出实例 var $currentChart = $('.chart-one'); var currentChartInstance = $currentChart.data('chartInstance'); currentChartInstance.update();
第二种方法日常使用起来更方便,因为你可以直接通过选择器找到DOM元素,再取出对应的图表实例,不用额外处理数组匹配逻辑。
内容的提问来源于stack exchange,提问作者sdvnksv
相关产品推荐
相关产品推荐

