Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HighCharts在重置图表选项后导出中断_Javascript_Jquery_Highcharts_Highstock - Fatal编程技术网

Javascript HighCharts在重置图表选项后导出中断

Javascript HighCharts在重置图表选项后导出中断,javascript,jquery,highcharts,highstock,Javascript,Jquery,Highcharts,Highstock,在初始加载页面时,我们设置图表选项并创建图表。我们允许用户操作显示/隐藏哪些系列项目,以及更改每个系列的类型。我们还有一个“重置图表”操作,可以将图表恢复到其原始加载设置。用户重置图表后,对图表所做的任何更改都不会反映在导出的图像上,除非用户更改了其系列图表类型。JSFIDLE的一个示例演示了这个问题 加载图表后,单击导出类型,您会看到它们匹配。现在从图例中取消选择一个系列,然后再次导出-请注意,导出和页面仍然匹配。现在从下拉列表中选择“单一系列”并导出-它们再次匹配。现在单击重置图表或从下拉列

在初始加载页面时,我们设置图表选项并创建图表。我们允许用户操作显示/隐藏哪些系列项目,以及更改每个系列的类型。我们还有一个“重置图表”操作,可以将图表恢复到其原始加载设置。用户重置图表后,对图表所做的任何更改都不会反映在导出的图像上,除非用户更改了其系列图表类型。JSFIDLE的一个示例演示了这个问题

加载图表后,单击导出类型,您会看到它们匹配。现在从图例中取消选择一个系列,然后再次导出-请注意,导出和页面仍然匹配。现在从下拉列表中选择“单一系列”并导出-它们再次匹配。现在单击重置图表或从下拉列表中选择“多系列”。这将使图表恢复最初加载时的外观。现在取消选择一个系列并导出-它们不再匹配。导出的图像仍然选择了所有系列。现在再次选择“单系列”,并将类型更改为“线条”并导出-再次显示所有系列,但它们都是线条类型

这是我在“重置图表”单击操作上重置图表的方式:

   //reset Main Chart chart to original specs
    resetMainChart.live('click', function () {
        forceResetChart(chartMainLoc);
    });
...
function forceResetChart(chart) {
    if (mainGraphMode.is(':visible')) {
        if (mainGraphMode.val() == 'multiple') {
            //if (mainGraphFormatType.val() != 'null') {
            //    mainGraphFormatType.val('null');
            //}
            mainGraphFormatType.val('null');
        } else {
            mainGraphMode.val('multiple');
            mainGraphFormatType.val('null');
        }
        mainGraphFormatType.hide();
        mainGraphFormatDefault.show();
    } else {
        mainGraphFormatType.val('null');
    }
    $('#chartMain').highcharts().destroy();
    chartMainLoc = new Highcharts.Chart(optionsChartMain, highlightSer);
}

我不明白为什么以这种方式重置图表会破坏输出。我已经阅读了一些对其他问题的回答,其中指出我们应该获取当前显示图表的SVG,并将其发送到导出方法。我不知道该怎么做。文档声明getSVG()方法获取初始加载的图表的SVG字符串,而不是活动图表。

好吧,没有问题,它完全按照您编写的那样工作。考虑这一点:

chartMainLoc = new Highcharts.Chart(optionsChartMain, highlightSer);

highlightSer
中,您将显示所有系列。导出图表时,图表从头开始创建,并再次使用回调,因此所有系列都可见。删除
highlightSer
回调,您将看到差异。

好的,但我正在更改图表上的内容-显示的是哪个系列等。为什么在初始加载时,我可以按自己认为合适的方式操作图表,但如果我将图表重置为初始加载设置并操作图表,则导出选项不会“查看”更新的图表?如果我删除了
高亮显示器
回调,则只会显示我从单系列视图中选择的系列,即使
选项ChartMain
显示所有系列
可见:true
。我被困在两个错误/失败之间。使用
jQuery.extend(true,{},options)
仅对图表使用复制,而不是选项本身。看:好吧,这似乎很管用。但是,这到底是在做什么?如果您使用
series.update()
添加点、修改颜色或其他一些更改,您将获得相同的效果(只要您使用的是object,而不是copy)。在重新创建用于导出的图表后调用回调-因此它将覆盖系列可见性。例如,如果您将在该回调中添加AJAX调用,那么在导出的图表上您将得到两个系列
chart.exportChart()
使用
getSVG()
从初始选项创建图表副本,并与实时完成的更改合并。然后,再次调用callback。当您希望在图表上添加自定义绘图,并希望将其导出时,此功能非常有用。