Невозможно удалить все "серии" в старших чартах - PullRequest
4 голосов
/ 06 ноября 2011

Не совсем уверен, что происходит с моим кодом, но у меня возникают проблемы при удалении всех серий в старших таблицах. Когда я вызываю функцию resetChart , которая удаляет только 2 из 4 серий, я настраиваю временное оповещение, чтобы показать на дисплее, что он удаляет, и только 2 серии.

Однако, когда я удаляю строку chart.series[i].remove();, все 4 оповещения работают. Я попробовал несколько способов зацикливания массива, даже перевернул его, но это не имеет значения.

если вы скопируете приведенный ниже код в jsfiddle, вы поймете, что я имею в виду

HTML

<div id="container" style="height: 400px; min-width: 600px"></div>
<script type="text/javascript" src="http://www.highcharts.com/js/testing-stock.js"></script>
<script type="text/javascript" src="http://www.highcharts.com/samples/data/usdeur.js"></script>

JQuery

$(function() {
var chart;

var colors = Highcharts.getOptions().colors,
    categories = ['October', 'November'],
    name = 'Monthly',
    data = [{
        y: 22,
        drilldown:[{
            name: 'Income',
            data: [12, 0],
            categories: ['Income', 'Expenses']
        }, {
            name: 'Expenses',
            data: [0, 5]
        }, {
            name: 'Employee',
            data: [0, 3]
        }, {
            name: 'Tax Office',
            data: [0, 1]
        }]
    }, {
        y: 21
    }];
function setChart(drilldown) {
    $.each(chart.series, function(i, val) {
        val.remove();
    });
    if(drilldown) {
        chart.xAxis[0].setCategories(drilldown[0].categories);
        $.each(drilldown, function(i, val) {
            chart.addSeries({
                 name: val.name,
                 data: val.data
            }, false);
        });
    }

    chart.redraw();
}
function resetChart() {
    //chart.toolbar.remove('RESET');
    $.each(chart.series.reverse(), function(i) {
        alert('removing :' + chart.series[i].name);

        // IF I REMOVE THE BELOW LINE, ALL ALERTS DISPLAY CORRECTLY
        chart.series[i].remove();
    });

     chart.xAxis[0].setCategories(categories);
     chart.addSeries({
          name: name,
          data: data
     });
     chart.redraw();
}

chart = new Highcharts.Chart({
    chart: {
        spacingLeft: 5,
        spacingRight: 5,
        spacingBottom: 5,
        renderTo: 'container',
        type: 'column'
    },
    title: false,
    xAxis: {
        categories: categories
    },
    yAxis: {
        title: false,
        labels: {
            formatter: function() {
                str = '$' + this.value + '';
                return str.replace('$-', '-$');
            }
        },
    },
    legend: {
        enabled: false
    },
    plotOptions: {
        column: {
            cursor: 'pointer',
            stacking: 'normal',
            point: {
                events: {
                    click: function () {
                        var drilldown = this.drilldown;
                        if (drilldown) { // drill down;
                            setChart(drilldown);
                        }
                    }
                }
            }
        }
    },
    tooltip: {
        formatter: function() {
           var point = this.point,
              s = '<b>$' + this.y +'</b>';
              s = s.replace('$-', '-$');
           if (point.drilldown) {
              s += ': Click to view '+ point.category +'';
           }
           return s;
         }
    },
    series: [{
        name: name,
        data: data
    }]
});
chart.toolbar.add('RESET', 'Reset', 'chartReset', resetChart);
});

1 Ответ

10 голосов
/ 07 ноября 2011

ИСПРАВЛЕНО

Вместо того, чтобы использовать каждый, который я использовал в то время. Когда ряд был удален, он удалял его из массива, поэтому массив становился меньше

каждый раз, когда вызывался метод remove ().

Заменены оба экземпляра каждого (в setChart и resetChart ):

$.each(chart.series.reverse(), function(i) {
    chart.series[i].remove();
});

С:

 while(chart.series.length > 0)
 chart.series[0].remove();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...