2012-06-19 5 views
19

Я видел этот код: http://jsfiddle.net/AVygG/когда полностью загружена графическая карта?

Мне любопытно, когда смысл в том, что highchart загружается полностью? Я видел в документации по высокому графику, что события: нагрузка: должна делать магию, позволяющую вызвать функцию обратного вызова при полной загрузке highchart.

Если бы он был полностью загружен, можно ли предположить, что var chart должен иметь значения, когда появляется предупреждение? Это хорошая основа, что график уже загружен?

Причина, по которой я просил, заключается в том, что я работаю над другим кодом, который, по-видимому, не полностью загружается в IE8. Похоже, что на высоких диаграммах потенциально может быть состояние гонки при загрузке его элементов.

Спасибо!

$(function() { 
// create the chart 
var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     events: { 
      load: function(event) { 
       alert ('Chart loaded'); 
      } 
     }   
    }, 
    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]  
    }] 
}); 

});

+1

Можете ли вы продемонстрировать проблему, с которой вы сталкиваетесь в jsfiddle? – jasonlfunk

ответ

6

Попробуйте с redraw события. Это событие запускается после загрузки, но также после добавления серии и изменения размера диаграммы.

$(function() { 
    // create the chart 
    var chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container', 
      events: { 
       redraw: function(event) { 
        alert ('Chart loaded'); 
       } 
      }   
     }, 
     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]  
     }] 
    }); 
}); 

Redraw событие из OFFICAL Highcharts ссылка: http://api.highcharts.com/highcharts#chart.events.redraw

И демо: http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/highcharts/chart/events-redraw/

6

В функции нагрузки обратного вызова, вы можете получить доступ к объекту диаграммы с помощью "это" указатель.

 events: { 
      load: function(event) { 
       alert ('Chart loaded with series :'+ this.series[0].name); 
       console.log(this); 
      } 
     }   

JsFiddle: http://jsfiddle.net/msjaiswal/AVygG/25/

+1

как насчет этого? http://jsfiddle.net/AVygG/97/ Функция обратного вызова срабатывает раньше, чем ожидалось. –

16

Highcharts имеет функцию обратного вызова

var chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container', 
      events: { 
       redraw: function(event) { 
        alert ('Chart loaded'); 
       } 
      }   
     }, 
     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]  
     }] 
    },function(chart){ 

alert('LOADED'); 

}); 
+0

есть что-то вроде при запуске анимации? – ivkremer

2

Это был дан ответ, но не достаточно решительно. Highcharts документация говорит явно

... В большинстве случаев диаграмма строится в одном потоке, а в Internet Explorer, версии 8 или меньше диаграмма иногда инициируется до документа готов, и в этих случаях объект диаграммы не будет закончен непосредственно после звонка new Highcharts.Chart(). В качестве результата код, который полагается на недавно построенный объект диаграммы, должен всегда запускаться в обратном вызове.

Итак, имеем дело с диаграммой в IE8 должно быть сделано в функции обратного вызова, то есть new Highcharts.Chart(options, function(chart) { ... }). Вы также можете использовать function() { ... } и использовать функцию this.

В отношении вашей конкретной проблемы повторно загружается сообщение. Я должен был сделать это в обратном вызове, но он работает.