Extjs 4.2.1堆积条形图最小值和最大值基于商店而变化

时间:2013-09-26 05:18:56

标签: javascript jquery extjs

您好我正在使用extjs 4.2.1应用程序,我正在使用条形图(堆叠)。在x轴上,我希望范围从-100(最小)到最大(100),相差20(majorTickSteps = 10)。

以下是代码

var store = Ext.create('Ext.data.JsonStore', {
fields: ['name', 'cost','sell'],
data: [
    {'name': "2013", 'cost': -36.483395098129556, 'sell': 25.516604901870444},
    {'name': "2013", 'cost': -27.483395098129556, 'sell': 8.516604901870444},
    {'name': "2013", 'cost': -35.483395098129556, 'sell': 19.516604901870444},
    {'name': "2013", 'cost': -25.483395098129556, 'sell': 33.516604901870444}
]

});

Ext.create('Ext.chart.Chart', {
        renderTo: Ext.getBody(),
        id:'chart',
        width: 580,
        height: 165,
        animate: true,
        store: store,
        axes: [{
            type: 'Numeric',
            position: 'bottom',
            fields: ['cost','sell'],  
            grid: true, 
            minimum: -100,
            maximum:100      
        }, {
            type: 'Category',
            position: 'left',
            fields: ['name']
        }],
        series: [{
            type: 'bar',
            axis: 'bottom',
             stacked: true,
            xField: 'name',
            yField: ['cost','sell']
        }]
    });
  • 如果stacked = true,则x轴最小值和最大值将根据商店
  • 进行更改
  • 如果stacked = false,则x轴的最小值和最大值保持不变,但不会堆叠。

我需要堆积条形图,其中包含我指定的最小值和最大值。我该怎么办?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是ExtJS中的known issue(EXTJSIV-7844)。解决方案是覆盖轴的processView函数。

原始代码如下所示(see the docs):

processView: function() {
    var me = this,
        chart = me.chart,
        series = chart.series.items,
        i, l;

    for (i = 0, l = series.length; i < l; i++) {
        if (series[i].stacked) {
            // Do not constrain stacked charts (bar, column, or area).
            delete me.minimum;
            delete me.maximum;
            me.constrain = false;
            break;
        }
    }

    if (me.constrain) {
        me.doConstrain();
    }
}

正如您所看到的,有一些代码可以故意阻止您做您正在尝试做的事情。我不确定为什么代码存在,但一个简单的解决方法是覆盖processView函数,使其不会这样做。

processView: function() {
    var me = this;

    if (me.constrain) {
        me.doConstrain();
    }
}

有关工作示例,请参阅this fiddle