Highcharts - 在show,hide或legendItemClick上打开和关闭网格线

时间:2012-04-27 16:31:46

标签: javascript highcharts

我有一个包含多个y轴的多系列柱形图。设置y轴使得仅阵列中的第一个yAxis具有gridLineWidth = 1。其余的都是零。

我所看到的是,如果我隐藏yAxis具有gridLineWidth = 1的所有系列项目,则系列项目的其余部分(使用非主要yAxis的项目)根本不显示网格线)。这是有道理的,因为我已将gridLineWidth设置为零...

因此,为了始终显示至少一组网格线,我决定在plotOptions.column.events上处理hideshow事件(我也试过legendItemClick)首先将所有gridLineWidth设置为零,然后查找第一个可见系列,并将其yAxis对象上的gridLineWidth设置为1,如下所示:

plotOptions: {
    column: {
        ...
        events: {
            show: function (event) {
                var series = this.chart.series;
                var yAxes = this.chart.yAxis;

                // first hide all the gridlines
                _.each(yAxes, function (axis) { axis.gridLineWidth = 0; });
                var firstVisibleSeries = _.find(series, function (ser) { return ser.visible == true; });
                if (firstVisibleSeries != null) {
                    firstVisibleSeries.yAxis.gridLineWidth = 1;
                }
                this.chart.redraw();
            }
        },
    ...
    },
},
...

我正在使用Underscore.js作为_.each()和_.find()方法。

使用firebug,一切看起来都很好(意味着第一个可见系列项的gridLineWidth = 1,而在方法执行结束时所有其他项都设置为零)。

但无论我做什么,包括this.chart.redraw()调用我最后都陷入了绝望,它似乎没有处理我对yAxis对象的更改。如果我隐藏使用第一个yAxis的所有系列项目,网格线仍然缺失。

我做错了什么 - 我是否缺少一些最后的步骤来使更改永久化,或者我可以采取不同的方法来实现这一目标?

感谢您的帮助

修改

这是一个提出问题的jsFiddle: http://jsfiddle.net/kmkuntz/7NEhU/2/

隐藏两个'钱'类型系列显示网格线消失。

1 个答案:

答案 0 :(得分:0)

感谢highslide论坛上的cailie,这已得到解决。

来自帖子:在yAxis电话之后我需要'.options':

firstVisibleSeries.yAxis.options.gridLineWidth = 1;

基础jsfiddle包含修复:http://jsfiddle.net/7NEhU/