Экспортные перерывы HighCharts после сброса параметров диаграммы

0

При начальной загрузке страницы мы устанавливаем параметры диаграммы и создаем диаграмму. Мы позволяем пользователю манипулировать тем, какие элементы серии показаны/скрыты, а также изменить тип каждой серии. У нас также есть действие "Сбросить диаграмму", которое вернет график обратно к первоначальной настройке загрузки. Когда пользователь сбрасывает диаграмму, любые изменения, внесенные в диаграмму, не отражаются на экспортированном изображении, кроме случаев, когда пользователь изменил тип своей серии. Пример 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 загруженной в сеть диаграммы, а не активную диаграмму.

Теги:
highcharts
highstock

1 ответ

1
Лучший ответ

Ну, нет ничего плохого, он работает точно так же, как вы написали. Учти это:

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

В highlightSer вы показываете все серии. При экспорте диаграммы диаграмма создается с самого начала, а обратный вызов используется еще раз, поэтому все серии видны. Удалите обратный вызов highlightSer и вы увидите разницу.

  • 0
    Хорошо, но затем я изменяю то, что на графике - какие серии показаны и т. Д. Почему при начальной загрузке я могу манипулировать графиком так, как считаю нужным, но если я сбрасываю график в исходные настройки загрузки и манипулирую графиком при экспорте варианты не "видят" обновленный график? Если я highlightSer обратный вызов highlightSer то будут показаны только те серии, которые я выбрал в представлении одной серии, даже если optionsChartMain сообщает, что все серии visible: true . Я застрял между 2 ошибками / сбоями.
  • 0
    Используйте jQuery.extend(true, {}, options); использовать только копию для диаграммы, а не сами параметры. Смотрите: jsfiddle.net/FfzaH/4
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню