Highcharts / jQuery - уничтожить и перестроить диаграмму с оригинальными параметрами

На основе информации в этой теме: Реализовать собственное состояние - INACTIVE_STATE?

Я построил диаграмму, которая соответствует моим потребностям - jsfiddle

Я добавил несколько пользовательских элементов управления, чтобы пользователь мог показывать/скрывать все серии и отмечать/снимать все серии.

Все это работает нормально.

Последнее, что я хочу сделать, это позволить пользователю сбросить диаграмму с исходными параметрами.

Эта часть у меня тоже заработала, но есть проблема: после перестроения диаграммы функции, которые позволяют пользователю отображать/скрывать/отмечать/снимать отметку, больше не работают, потому что я уничтожил и повторно указал переменную, от которой они запускались. из.

Итак, мой вопрос (ы) -

  1. это правильный способ уничтожить и восстановить диаграмму, или есть лучший метод?
  2. если это способ сделать это, то как мне заставить мои функции показать/скрыть/проверить/снять отметку, чтобы они продолжали работать после этого?

Код для сброса диаграммы находится здесь:

//reset the chart to original specs
$('#resetChart').click(function(){
    chart1.destroy();
    chart1 = new Highcharts.Chart(optionsChart1,highlightSer);
});

highlightSer — это функция обратного вызова для выделения определенных серий.

пример кода, который после этого больше не работает:

var chart = chart1;
$('#showAll').click(function(){
        for(i=0; i < chart.series.length; i++) {
        chart.series[i].show();
    }
});

Спасибо!


person jlbriggs    schedule 24.10.2011    source источник


Ответы (2)


1) это правильный способ уничтожить и восстановить диаграмму, или есть лучший метод?

Это единственный способ, и Highcharts достаточно умен, чтобы вам не приходилось беспокоиться об утечках памяти.

2) если это способ сделать это, то как мне заставить мои функции показать/скрыть/проверить/снять отметку, чтобы они продолжали работать после этого?

Вы воссоздаете диаграмму, но не назначаете ее снова переменной chart.

$('#resetChart').click(function(){
    chart1.destroy();
    chart1 = new Highcharts.Chart(optionsChart1,highlightSer);
    chart = chart1; // <-------- Add this line here.
});
person Bhesh Gurung    schedule 24.10.2011

Есть ли причина для назначения диаграммы новой переменной здесь?

var chart = chart1;

chart больше не будет указывать на график после того, как вы его уничтожите. Если вы просто используете chart1, который вы переназначаете, все, похоже, работает просто отлично< /а>. Или я что-то упускаю?

person polarblau    schedule 24.10.2011