扩展Highcharts出口

时间:2018-04-24 14:54:19

标签: javascript highcharts export

我需要在Highcharts导出模块的exportChart方法中设置资源对象,但似乎无法覆盖它。

导出模块源代码位于http://code.highcharts.com/modules/exporting.src.js,我覆盖的特定子部分如下所示:

'use strict';
(function (factory) {
    if (typeof module === 'object' && module.exports) {
        module.exports = factory;
    } else {
        factory(Highcharts);
    }
}(function (Highcharts) {
    (function (H) {

        // create shortcuts
        var Chart = H.Chart,
            merge = H.merge,
            extend = H.extend;

        //... Removed extra code not needed for example
        extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
            exportChart: function (exportingOptions, chartOptions) {

                var svg = this.getSVGForExport(exportingOptions, chartOptions);

                // merge the options
                exportingOptions = merge(this.options.exporting, exportingOptions);

                // do the post
                H.post(exportingOptions.url, {
                    filename: exportingOptions.filename || 'chart',
                    type: exportingOptions.type,
                    // IE8 fails to post undefined correctly, so use 0
                    width: exportingOptions.width || 0,
                    scale: exportingOptions.scale,
                    svg: svg
                }, exportingOptions.formAttributes);

            }
            //... Removed extra code not needed for example
        });
        //... Removed extra code not needed for example

    }(Highcharts));
}));

要测试覆盖方法的能力,我使用以下代码:

(function (H) {
   var Chart = H.Chart,
       extend = H.extend;

   extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
       exportChart: function (exportingOptions, chartOptions) {
           alert('changed it');    
       }
   });  

}(Highcharts));

警报永远不会触发,而是正常的导出仍在发生。

我在这里创建了一个显示此问题的JSFiddle:https://jsfiddle.net/j005v79j/

有谁能告诉我为什么覆盖这种方法不起作用?

1 个答案:

答案 0 :(得分:0)

我意识到我还在我身边加载了code.highcharts.com/modules/offline-exporting.js,这不是小提琴。此脚本覆盖导出按钮以使用名为exportChartLocal()的其他方法。由于按钮现在绑定到一个永远不会被调用的方法,因此我的警报没有被触发。

我现在已经删除了对离线导出的调用,并会在以后的日期将代码覆盖到我的代码中。

感谢@Kamil指出了这个问题。