AmCharts.prêt n'est pas prêt lorsqu'il est chargé de manière asynchrone
-
20-12-2019 - |
Question
Au départ, j'ai mis tous les AmChart configs dans AmCharts.prêt est tout a bien fonctionné.
<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>
En quelque sorte, il s'arrête de fonctionner quand je présenterai RequireJS, comme indiqué dans amCharts rencontre requireJS.Quel que soit le code à l'intérieur de AmChart.prêt de rappel ne sera pas exécuté.(Bizarrement il a été exécutée une seule fois pendant le débogage)
La solution
Après quelques tests, j'ai réalisé AmChart.prêt seulement pousse le rappel à l' onReadyArray
ce qui est plus tard sauté pour l'exécution après la fenêtre.charge/de l'événement onload.En d'autres termes, si AmChart est chargé après la fenêtre.événement onload, AmChart.prêt est inutile.Ma solution est comme suit:
<script>
configChart = function() {
/* Create charts stuff */
};
if (AmCharts.isReady) {
configChart();
} else {
AmCharts.ready(configChart);
}
</script>
Autres conseils
Ne fonctionne toujours pas les nouvelles versions (version 3.14.1 à cette époque), mais les correctifs qu'il appelle le handleLoad
méthode manuelle:
AmCharts.handleLoad();
En l'appelant plusieurs fois ne semble pas faire de mal, non plus.
Parce que je charge dans des graphiques de manière asynchrone, je devais définir manuellement "amcharts.isready= true;"avant d'appeler mes fonctions d'amcharts.Par exemple:
var chartData1 = [];
function generateChartData() {
...
}
function createStockChart() {
...
}
if ($('.amChartDivExists').length > 0) {
AmCharts.isReady = true;
generateChartData();
createStockChart();
}