Pergunta

Inicialmente coloquei todas as configurações do AmChart em AmCharts.ready e tudo funcionou bem.

<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>

De alguma forma, ele para de funcionar quando apresento o RequireJS conforme as instruções em amCharts atende ao requireJS.Qualquer código dentro do retorno de chamada do AmChart.ready não será executado.(Estranhamente, foi executado uma vez durante a depuração)

Foi útil?

Solução

Depois de alguns testes, percebi que AmChart.ready apenas envia o retorno de chamada para o onReadyArray que é posteriormente exibido para execução após o evento window.load/onload.Em outras palavras, se o AmChart for carregado após o evento window.onload, o AmChart.ready será inútil.Minha solução alternativa é a seguinte:

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

Outras dicas

Ainda não funciona em versões mais recentes (versão 3.14.1 no momento), mas o que corrige é chamar o handleLoad método manualmente:

AmCharts.handleLoad();

Chamar várias vezes também não parece causar nenhum dano.

Como eu carrego nos gráficos de forma assíncrona, eu precisava definir manualmente "amCharts.isready = true;" Antes de chamar minhas funções de AmCharts.Por exemplo:

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

function createStockChart() {
   ...
}

if ($('.amChartDivExists').length > 0) {
    AmCharts.isReady = true;
    generateChartData();
    createStockChart();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top