2011-08-08 25 views
14

¿Hay algún evento listo onReady (o similar) para HighCharts?Evento onReady de Highcharts?

Actualmente, Highcharts sólo ofrece addSeries, click, load, redraw, y selection de objeto de gráfico (http://www.highcharts.com/ref/#chart-events). Aparentemente, el load debería ser el que dispare el evento "en el gráfico listo", pero no es así. Se disparaba el evento "cuando los datos se carga"

Este es un ejemplo que tienen para load: http://jsfiddle.net/hgbQm/

Aquí está una versión modificada del código anterior que muestra la chart no está listo cuando load se dispara: http://jsfiddle.net/QzKky/1/

¿Alguna idea?

Como alternativa, tendré que hacer una llamada demorada, pero será muy feo. ¡Gracias!

Respuesta

18

De hecho, la llamada demorada no es un enfoque muy bueno. El evento load está funcionando correctamente, pero el gráfico actual se conoce por la palabra clave this, es decir

// create the chart 
var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     events: { 
      load: function(event) { 
       //When is chart ready? 
       console.log(this); //this refers to the loaded chart. 
      } 
     }   
    }, 
    xAxis: { 
    }, 

    series: [{ 
     animation: false, 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]  
    }] 
}); 

Demo

Espero que esto ayude :)

+0

Argh, grande, que se olvidaron de 'this' :) Gracias! Mimado demasiado por EventManager ExtJS. Jaja. ¡Gracias! –

3

Este es, sin duda menos elegante que la respuesta aceptada, pero aún funciona bien con unas pocas líneas de código. La esencia es simplemente sondear todos los elementos HTML del contenedor de gráficos.

El código siguiente supone que tiene uno o más Highcharts unidos a elementos que tienen class = "carta":

var chartsToLoad = []; 

$('.chart').each(function(n,elem) { 

    chartsToLoad[n] = window.setInterval(function() { 

     if(typeof($(elem).highcharts()) !== 'undefined') { 

      // It's loaded now, go ahead... 
      $(elem).highcharts().doSomeHighchartsStuffHere() 

      // Permanently stop polling 
      window.clearInterval(chartsToLoad[n]); 
     } 

    }, 100); // Check every 100ms 


}); 
+0

Funcionó bien para mí esta solución porque la devolución de llamada 'plotOptions.series.animation.complete' no funcionó y la devolución de llamada cargó demasiado pronto – rjbultitude

+0

Funcionó bien para mí también, ya que quería hacer actualizaciones (por ejemplo, tickInterval etc.) después de la los datos de la serie estaban disponibles y, por lo tanto, ni el evento 'cargar' ni 'volver a dibujar' funcionarían! Sin embargo, un problema que aún enfrento es que obtengo un estado visual temporal intermedio antes de la representación final después de que mis actualizaciones se han completado. ¿Habría una manera fácil de mantener el estado del gráfico como cargando hasta que se llame a window.clearInterval? Gracias por publicar su solución de todos modos! –

5

El Highcharts.Chart constructor toma un argumento de devolución de llamada que se llama "cuando el objeto de gráfico se termina la carga y renderizado ". El objeto de gráfico se pasa como un argumento para la devolución de llamada.

$("#the-chart").highcharts(options, function (chart) { 
    alert("The chart is ready now"); 
    console.log("chart", chart); 
}); 

Gráfico (Opciones de objeto, la función de devolución de llamada) Este es el constructor para la creación de un nuevo objeto gráfico.

Parámetros

  • opciones: Object
    Las opciones del gráfico, como se documenta en la sección "El objeto Opciones" del menú izquierdo.

  • devolución de llamada: Función
    Función que se ejecuta cuando el objeto de gráfico termina de cargarse y renderizarse. En la mayoría de los casos, el gráfico está integrado en un hilo, pero en Internet Explorer versión 8 o menos, el gráfico a veces se inicia antes de que el documento esté listo, y en estos casos el objeto del gráfico no finalizará directamente después de llamar a new Highcharts.Chart(). Como consecuencia, el código que se basa en el objeto Chart recién creado siempre debe ejecutarse en la devolución de llamada. La definición de un manejador chart.event.load es equivalente.

devoluciones

  • Gráfico
Cuestiones relacionadas