2011-08-08 28 views
14

Có sự kiện nào sẵn sàng cho HighCharts onReady (hoặc tương tự) không?Sự kiện onReady của Highcharts?

Hiện nay, HighCharts chỉ cung cấp addSeries, click, load, redraw, và selection cho đối tượng biểu đồ (http://www.highcharts.com/ref/#chart-events). Rõ ràng là load nên là một trong những vụ cháy "trên biểu đồ sẵn sàng" sự kiện, nhưng nó không phải. Nó bắn sự kiện "khi dữ liệu được nạp"

Đây là một mẫu mà họ dành cho load: http://jsfiddle.net/hgbQm/

Dưới đây là một phiên bản sửa đổi của các mã trên trong đó cho thấy chart chưa sẵn sàng khi load là bắn: http://jsfiddle.net/QzKky/1/

Bất kỳ ý tưởng nào?

Hoặc, tôi sẽ cần thực hiện cuộc gọi bị trì hoãn nhưng điều đó sẽ rất xấu. Cảm ơn!

Trả lời

18

Thực tế cuộc gọi bị trì hoãn không phải là cách tiếp cận rất tốt. Sự kiện này load được hoạt động bình thường, nhưng bảng xếp hạng hiện nay được gọi bằng từ khoá this, tức là

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

Hope this helps :)

+0

Argh, tuyệt vời, tôi đã quên mất 'this' :) Cảm ơn! Pampered bởi ExtJS EventManager quá nhiều. Haha. Cảm ơn! –

3

này chắc chắn là ít thanh lịch hơn so với câu trả lời được chấp nhận, nhưng vẫn hoạt động tốt với một vài dòng mã. Bản chất là chỉ đơn giản là thăm dò ý kiến ​​tất cả các yếu tố HTML chứa biểu đồ.

Đoạn code dưới đây giả sử bạn có một hoặc nhiều Highcharts gắn liền với các yếu tố có class = "biểu đồ":

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

Làm việc tốt cho tôi giải pháp này vì cuộc gọi lại 'plotOptions.series.animation.complete' không hoạt động và gọi lại tải quá sớm – rjbultitude

+0

Làm việc tốt cho tôi, vì tôi muốn cập nhật (ví dụ: tickInterval, vv) sau dữ liệu chuỗi có sẵn và do đó, sự kiện 'tải' và 'vẽ lại' sẽ không hoạt động! Tuy nhiên, một vấn đề mà tôi vẫn phải đối mặt là tôi nhận được trạng thái trực quan trung gian tạm thời trước khi hiển thị cuối cùng sau khi các cập nhật của tôi hoàn tất. Sẽ có một cách dễ dàng để giữ trạng thái biểu đồ khi tải cho đến khi window.clearInterval được gọi? Cảm ơn bạn đã đăng bài giải pháp anyways! –

5

Các Highcharts.Chart constructor nhận một đối số callback mà được gọi là "khi đối tượng biểu đồ được tải xong và dựng hình ". Đối tượng biểu đồ được chuyển như một đối số cho hàm gọi lại.

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

Chart (tùy chọn Object, Chức năng gọi lại) Đây là constructor để tạo một đối tượng biểu đồ mới.

thông số

  • lựa chọn: Object
    Các tùy chọn biểu đồ, như tài liệu dưới tiêu đề "Đối tượng tùy chọn" ở menu bên trái.

  • gọi lại: Chức năng
    Một chức năng để thực thi khi đối tượng biểu đồ hoàn tất tải và hiển thị. Trong hầu hết các trường hợp, biểu đồ được xây dựng trong một luồng, nhưng trong Internet Explorer phiên bản 8 hoặc biểu đồ đôi khi được khởi tạo trước khi tài liệu sẵn sàng, và trong các đối tượng biểu đồ sẽ không được hoàn thành trực tiếp sau khi gọi Highcharts.Chart(). Kết quả là, mã dựa trên đối tượng Chart mới được xây dựng nên luôn chạy trong callback. Việc xác định trình xử lý chart.event.load tương đương.

Returns

  • Chart
Các vấn đề liên quan