2017-07-13 1 views
0

J'écris une nouvelle fonction "pointFormatter" pour montrer l'écart entre 2 points, tels que jsfiddle, mais quand je déplace la souris au premier point "7.Jan", l'info-bulle ne s'affiche pas correctement, et j'ai vu errorlog Mais dans la console, "TypeError: this.series.data [preIndex] est indéfini"Erreur d'info-bulle uniquement lorsque le point num Highstock> 10, pourquoi?

Mais, quand je change le timeRange en "all", alors déplacer la souris au premier point ne provoque plus d'erreur, et quand je change le timeRange en "1w", c'est OK aussi. De plus, si je change le nombre num de 10 à 9 en supprimant le dernier point, alors l'erreur ne se produit plus.

Pourquoi? Quelle est la cause de cette erreur?

$(function() { 
var chart = new Highcharts.StockChart({ 

    chart: { 
     renderTo: 'container' 
    }, 
    rangeSelector: {                                             
      allButtonsEnabled: true,                                          
      buttons: [{type: 'week',count: 1,text: '1w'},                                    

        {type: 'all',text: 'all'}                                       
      ],                                               
      selected: 0                                             
    }, 
    series: [{ 
     name: 'USD', 
     data: [ 
      [0,null], 
      [86400000,null], 
      [86400000*2,null], 
      [86400000*3,null], 
      [86400000*4,null], 
      [86400000*5,null], 
      [86400000*6,3], 
      [86400000*7,4], 
      [86400000*8,6], 
     [86400000*9,8], 
     ] 
    }], 
    plotOptions: {                                             
      line: {                                              
       step: 'left',                                            
       connectNulls: true,                                          
       tooltip: {                                            
        pointFormatter: function() {                                       
         var preIndex = this.index - 1;                                     
         while (preIndex >= 0 && this.series.data[preIndex].y == null) {                             
          preIndex--;                                         
         }                                             

         if (preIndex < 0) {                                        
          return '<span style="color:' + this.series.color + '">\u25CF</span>' + this.series.name + ': <b>' + this.y + '</b><br/>';             
         } else {                                           
          var prePoint = this.series.data[preIndex];                                 
          var prePointY = prePoint.y;                                     
          var prePointX = prePoint.x;                                     

          var day = (this.x - prePointX)/86400/1000;                                
          var add = this.y - prePointY                                     

          add_str = '(' + add + ')';                                     

          return '<span style="color:' + this.series.color + '">\u25CF</span>' + this.series.name + ': <b>' + this.y + '</b> ' + add_str + '<br/>';       
         }                                             
        }                                              
       }                                               
      }                                                
    },      
}); 
}); 

Répondre

1

Highstock a groupement de données caractéristiques - plus d'informations here.

Cette fonctionnalité peut modifier le tableau series.data. Au lieu de cela, vous pouvez utiliser series.options.data (données d'origine issues des options) ou désactiver dataGrouping.

plotOptions: { 
    line: { 
     dataGrouping: {enabled: false}, 

exemple: http://jsfiddle.net/6mpt8xv2/