При начальной загрузке страницы мы устанавливаем параметры диаграммы и создаем диаграмму. Мы позволяем пользователю манипулировать тем, какие элементы серии показаны/скрыты, а также изменить тип каждой серии. У нас также есть действие "Сбросить диаграмму", которое вернет график обратно к первоначальной настройке загрузки. Когда пользователь сбрасывает диаграмму, любые изменения, внесенные в диаграмму, не отражаются на экспортированном изображении, кроме случаев, когда пользователь изменил тип своей серии. Пример jsFiddle является здесь, который демонстрирует эту проблему.
После загрузки диаграммы нажмите на тип экспорта, и вы увидите, что они совпадают. Теперь отмените выбор одной из серий из легенды и снова экспортируйте - обратите внимание, что экспорт и страница по-прежнему совпадают. Теперь выберите "одиночная серия" из раскрывающегося списка и экспорта - снова они совпадают. Теперь нажмите "Сбросить диаграмму" или выберите "несколько серий" из раскрывающегося списка. Это приводит диаграмму к тому, как она выглядела, когда она была первоначально загружена. Теперь отмените выбор серии и экспортируйте - они больше не совпадают. Экспортированное изображение по-прежнему имеет все выбранные серии. Теперь снова выберите "одиночная серия" и измените тип на "строка" и "экспорт" - снова отображаются все серии, но все они относятся к типу линии.
Вот как я делаю сброс диаграммы в действии щелчка "Сбросить диаграмму":
//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
и вы увидите разницу.
highlightSer
обратный вызовhighlightSer
то будут показаны только те серии, которые я выбрал в представлении одной серии, даже еслиoptionsChartMain
сообщает, что все серииvisible: true
. Я застрял между 2 ошибками / сбоями.jQuery.extend(true, {}, options);
использовать только копию для диаграммы, а не сами параметры. Смотрите: jsfiddle.net/FfzaH/4