Highcharts - 使用 setSize 向下钻取会导致图表损坏

Highcharts - Drilldown with setSize causes chart corruption

当我向下钻取数据时,我需要能够调整图表的大小,因为例如,我的顶层可能只有 3 个系列,而我的向下钻取可能是 10 个系列,反之亦然.但是,我对此有疑问。

使用这个 fiddle 我能够重现错误:http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/column-drilldown/

  type: 'bar',
  events: {
            drilldown: function(e) {
           this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );

            },
            drillup: function(e) {
           this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
        }
     }                 
  },

注意:如果向下钻取到 Internet Explorer,底部会显示 "Proprietary or Undetectable",这是顶层 "Brands" 图表遗留下来的。

如果我删除 this.setSize 内容,图表将正常工作。

这是经过上述更改后的图表。

http://jsfiddle.net/7oatr7xe/

问题图片:http://i.imgur.com/RrjvLRI.png

不知道这是否是一个错误,但如果您调用 setSize 超时(即使 1 毫秒似乎也可以),您似乎可以解决它

        drilldown: function(e) {
            setTimeout(function () {
                    this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
            }, 1);
        }

http://jsfiddle.net/7oatr7xe/1/

问题是在 drillDown 中重绘图表,在 setSize 中你尝试做同样的事情。解决办法是设置flag redraw (in setSize) as false.

            drilldown: function(e) {
                this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );

            },
            drillup: function(e) {
                this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );
            }

示例:http://jsfiddle.net/7oatr7xe/3/