BUG? RangeSelector按钮无法正常工作

时间:2014-01-17 09:47:13

标签: javascript highstock

我想我在最新版本的Highstock中发现了一个错误:

定义了以下RangeSelector:

 rangeSelector: {
                buttons: [{ type: 'day', count: 1, text: '1d' },
                               { type: 'day', count: 7, text: '7d' },
                               { type: 'month', count: 1, text: '1m' },
                               { type: 'month', count: 3, text: '3m' },
                               { type: 'year', count: 1, text: '1y' },
                               { type: 'all', text: 'All' }],
                selected: 6, // all
                inputEnabled: false
            }

现在我正在显示1年的数据。这意味着当我按下“1y”和“all”时,会显示完全相同的视图。当我按下“all”时,两个按钮都处于活动状态:

enter image description here

到目前为止一切顺利。现在我再次选择一个不同的范围(让我们说“1d”)。数据得到正确显示。但是现在出现了错误:范围选择器仍然选择了“1y”,结果如下:

enter image description here

这是一个无效状态,我认为这是一个错误。我可以使用某种解决方法吗?

我使用的是Highstock v1.3.9

编辑:小提琴重现此错误: http://jsfiddle.net/xdRk8/5/

重现的步骤:

  1. Run Fiddle
  2. 点击范围选择器中的“全部”
  3. 点击“范围选择器”中的“1d”

1 个答案:

答案 0 :(得分:0)

我设法通过使用解决方法解决了这个问题。如果它恰好是一年,我会检查要显示的数据的时间增量。如果没有,我在创建高价图表之前动态地向选项添加“全部”按钮:

// Workaround to fix a bug in Highstock 1.3.9 where
// the "1y" button was active all the time when exactly
// 1 year of data is displayed
var past = new Date(plotEnd.getTime());
past.setYear(past.getFullYear() - 1);
if (past.getTime() == plotStart.getTime()) {
    var oneYear = true;
}

var chartOptions = {
    // ...
}

if (!oneYear) {
    chartOptions.rangeSelector.buttons.push({ type: 'all', text: 'All' });
}