2013-08-23 39 views
3

我正在使用highcharts和highstock,并且有一些使用rangeSelector的图表。从HighSearch中的RangeSelector获取当前选择的范围

一切工作正常,但我想获取当前选择的范围(当用户点击rangeSelector按钮之一),以便我可以将它存储在cookie中以知道默认显示哪个范围下次。

到目前为止,我已经尝试了各种各样的东西,比如增加一个chart.events.redraw测试来试图捕获chart.rangeSelector.buttons对象,但它似乎并没有包含任何有趣的东西。

对我来说,理想的情况是rangeselector.buttons上的事件回调,具有简单的getter函数,就像chart.rangeSelector.buttons[x].setState()的等价物,名为chart.rangeSelector.buttons[x].getState()

我很惊讶这不存在...我必须错过一些东西。任何人都可以帮忙吗?

+0

后你已经尝试或http://jsfiddle.net –

+1

拿来看的相关主题http://stackoverflow.com/questions/15846859/which-rangeselector-button-被选中的高分辨率 –

+0

来自http://jsfiddle.net/E6GHC/1/的jsfiddle似乎部分回答了这个问题(尽管我仍然很惊讶这里没有事件回调)。 –

回答

5

jsfiddle.net/E6GHC/1的的jsfiddle似乎部分地回答这个问题(虽然我依然惊讶它是这个事件没有回调)

在x轴的setExtremes事件做工作:

xAxis: { 
     events: { 
      setExtremes: function(e) { 
       console.log(this); 
       if(typeof(e.rangeSelectorButton)!== 'undefined') 
       { 
        alert('count: '+e.rangeSelectorButton.count + 'text: ' +e.rangeSelectorButton.text + ' type:' + e.rangeSelectorButton.type); 
       } 
      } 
     } 
    } 
4

http://jsfiddle.net/E6GHC/5/应该做你想做的:

xAxis: { 
    events: { 
    setExtremes: function(e) { 
     if(typeof(e.rangeSelectorButton)!== 'undefined') { 
     var c = e.rangeSelectorButton.count; 
     var t = e.rangeSelectorButton.type; 
     var btn_index = null; 
     if(c == 1 && t == "month"){ 
      btn_index = 0; 
     } else if(c == 3 && t == "month"){ 
      btn_index = 1; 
     } else if(c == 6 && t == "month"){ 
      btn_index = 2; 
     } else if(t == "ytd"){ 
      btn_index = 3; 
     } else if(c == 1 && t == "year"){ 
      btn_index = 4; 
     } else if(t == "all"){ 
      btn_index = 5; 
     } 
     // Store btn_index in a cookie here and use it 
     // to initialise rangeSelector -> selected next 
     // time the chart is loaded 
     alert(btn_index); 
     } 
    } 
    } 
} 
2

图表事件:重画可以得到显示范围。代码在highstock测试3.10

events: { 
    redraw: function(event) { 
     console.log('==============> chart redraw <=============='); 
     console.log(
      Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', event.currentTarget.xAxis[0].min), 
      Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', event.currentTarget.xAxis[0].max) 
     ); 
     // log the min and max of the y axis 
     console.log(event.currentTarget.yAxis[0].min, event.currentTarget.yAxis[0].max); 
    } 
}