Скрыть серии графиков в ExtJs 4 - PullRequest
1 голос
/ 01 февраля 2012

Я перевожу приложение ExtJs 3 на ExtJs 4. Один из компонентов, который мне нужно изменить, - это диаграмма с сериями столбцов и линий. Он отображает данные за предыдущий и текущий годы. Рядом с графиком есть флажок «Сравнить с прошлым годом». Когда он отмечен, все серии должны быть видимыми и скрытыми, если он не отмечен. В ExtJs 3 я выполнил эту задачу, установив видимость: скрытый для серийных стилей следующим образом: chart.setSeriesStyles (...). Но в ExtJs 4 эта функция отсутствует, и я не могу найти другой способ скрыть серии по требованию. Вот код моей диаграммы:

    var store = Ext.create('Ext.data.Store', {
    fields: [
        'month','data1','data2','data3','prev_data1','prev_data2','prev_data3'
    ],
    proxy: {
        type: 'ajax',
        url: '/getmonthlystats.php'
    }
});

this.statChart = Ext.create('Ext.chart.Chart', {
    flex: 1,
    store: store,
    axes: [{
        type: 'Numeric',
        position: 'left',
        minimum: 0,
        maximum: 100,
        fields: [
            'data1',
            'data2',
            'data3',
            'prev_data1',
            'prev_data2',
            'prev_data3'
        ],
        label: {
            renderer: Ext.util.Format.numberRenderer('0,0')
        },
        grid: true
    },{
        type: 'Category',
        position: 'bottom',
        fields: ['month'],
        label: {
            rotate: {
                degrees: 315
            }
        }
    }],
    series: [{
        type: 'column',
        yField: ['data1','data2','data3'],
        xField: 'month'
    },
    {
        type: 'line',
        yField: 'prev_data1',
        xField: 'month'
    },{
        type: 'line',
        yField: 'prev_data2',
        xField: 'month'
    },{
        type: 'line',
        yField: 'prev_data3',
        xField: 'month'
    }]
});

Таким образом, строки prev_data1, prev_data2, prev_data3 должны отображаться или скрываться при необходимости (в зависимости от состояния флажка). Кто-нибудь знает способ сделать это?

Thanx.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Попробуйте (пример из моего кода):

handler: function (checkbox, checked) {
    if (checked)
        chart.series.getAt(index).showAll();
    else
        chart.series.getAt(index).hideAll();
}
0 голосов
/ 17 апреля 2014

Для ExtJS 4.2.x

Если вы используете 'легенду' с вашими диаграммами, этот код будет лучше для вас:

var chart = Ext.getCmp(chartId);
var series = chart.series.getAt(seriesIndex);
if (value) {
    series.showInLegend = true;
    series.showAll();
} else {
    series.showInLegend = false;
    series.hideAll();
}
chart.redraw();
...