AmCharts.ready 在异步加载时尚未就绪

AmCharts.ready is not ready when loaded asynchronously

本文关键字:时尚 就绪 加载 异步 ready AmCharts      更新时间:2023-09-26

最初我把所有的AmChart配置都放在AmCharts.ready中,一切正常。

<script src="amcharts/amcharts.js" type="text/javascript"></script>
<script src="amcharts/serial.js" type="text/javascript"></script>
<script>
    AmCharts.ready(function() {
      console.log("this works");
      /* Other configs */
    })
</script>

不知何故,当我按照 amCharts 中的说明引入 RequireJS 以满足 requireJS 时,它停止工作。AmChart.ready回调中的任何代码都不会被执行。(奇怪的是它在调试期间执行了一次(

经过几次测试,我意识到 AmChart.ready 只将回调推送到onReadyArray中,该回调稍后在 window.load/onload 事件后弹出以执行。换句话说,如果在window.onload事件之后加载AmChart,AmChart.ready是无用的。我的解决方法如下:

<script>
    configChart = function() {
      /* Create charts stuff */
    };
    if (AmCharts.isReady) {
      configChart();
    } else {
      AmCharts.ready(configChart);
    }
</script>

在较新版本(目前为 3.14.1 版(中仍然不起作用,但修复它的方法是手动调用 handleLoad 方法:

AmCharts.handleLoad();

多次调用它似乎也不会造成任何伤害。

因为我是异步加载图表的,所以我需要在调用我的 AmCharts 函数之前手动设置 "AmCharts.isReady = true;"。例如:

var chartData1 = [];
function generateChartData() {
   ...
}
function createStockChart() {
   ...
}
if ($('.amChartDivExists').length > 0) {
    AmCharts.isReady = true;
    generateChartData();
    createStockChart();
}