2015-04-08 60 views
2

我希望写一个自定义标签格式,它会显示自定义标签在一些条件和其它条件返回默认的一个:Highcharts - 如何获得默认的Y轴标签格式的自定义格式

function yAxisFormatter() { 
    var val = //need default formatter value here 
    if(someCondition){ 
     val = .... 
    } 

    return val; 
} 

Doc说默认格式是

function() { 
    return this.value; 
} 

this.value从默认的显示方式不同,我需要一个像9K,而不是9000等默认标签。

回答

0

您需要从核心提取部分代码,然后实现该目标。

formatter: function() { 
       var numericSymbolDetector = this.axis.isLog ? this.value : this.axis.tickInterval, 
        numericSymbols = this.chart.options.lang.numericSymbols, 
        i = numericSymbols && numericSymbols.length, 
        value = this.value, 
        ret=value, 
        multi; 

       if (i && numericSymbolDetector >= 1000) { 
        ret = UNDEFINED; 
        while (i-- && ret === UNDEFINED) { 
         multi = Math.pow(1000, i + 1); 
         if (numericSymbolDetector >= multi && numericSymbols[i] !== null) { 
          ret = Highcharts.numberFormat(value/multi, -1) + numericSymbols[i]; 
         } 
        } 
       } 

       return ret; 

      } 

例子:http://jsfiddle.net/x9r35s5q/5/

+2

当值小于1000时有一些问题。请检查http://jsfiddle.net/x9r35s5q/1/,你是否错过初始化'ret = value'? – Jaskey

+0

正确;)小错 –

+0

好吧,请注意,我不知道为什么,行为改变后我们设置ret =值,请检查http://jsfiddle.net/x9r35s5q/3/。另外,如果我们初始化'ret = value',那么''ret === UNDEFINED'仍然需要的条件是,this.value'可以是未定义的吗? – Jaskey

1

在在这种情况下,别人绊(像我)你不需要复制的核心的一部分。默认格式化程序被定义为轴对象的一部分。你可以像这样回退:

function myCustomFormatter() { 
     var result = this.axis.defaultLabelFormatter.call(this); 
     //Do your own things here. 
     return result; 
};