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

时间:2014-07-29 10:05:22

标签: javascript requirejs amcharts

最初,我把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 meets requireJS中的指示引入RequireJS时,它会以某种方式停止工作。无论AmChart.ready内部的代码是什么,都不会执行回调。 (奇怪的是,它在调试期间执行了一次)

3 个答案:

答案 0 :(得分:14)

经过几次测试后,我意识到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>

答案 1 :(得分:5)

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

AmCharts.handleLoad();

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

答案 2 :(得分:1)

因为我异步加载图表,我需要手动设置“AmCharts.isReady = true;”在调用我的AmCharts功能之前。例如:

var chartData1 = [];
function generateChartData() {
   ...
}

function createStockChart() {
   ...
}

if ($('.amChartDivExists').length > 0) {
    AmCharts.isReady = true;
    generateChartData();
    createStockChart();
}