【问题标题】:Can't create a simple line chart in Ext-JS无法在 Ext-JS 中创建简单的折线图
【发布时间】:2011-08-01 20:10:00
【问题描述】:

尝试创建简单图表时出现以下错误。我在我的应用程序中遇到了类似的问题,我一直在努力缩小问题的范围,所以我做了一个小的减少,我一辈子都无法弄清楚我做错了什么。有人可以看看我有什么,看看你是否能发现任何问题?

当我运行下面的代码时,我得到以下错误

意外值矩阵(NaN,NaN,NaN,NaN,NaN,-Infinity)解析 变换属性。 (函数(){var e=this,a=Object.protot...ate("Ext.XTemplate",j,g)}return j}}); ext-all.js(第 15 行)

这是我正在运行的代码:

Ext.require('Ext.chart.*'); 
Ext.require(['Ext.Window', 'Ext.layout.container.Fit']); 
Ext.onReady(function () { 
    var store = new Ext.data.ArrayStore({ 
        fields: [ 
            //timestamp means UNIX timestamp 
            {name: 'datetime', type: 'date', dateFormat: 'timestamp'}, 
            {name: 'data', type: 'float'} 
        ], 
        data: [ 
            [1311844196,47], 
            [1311846214,68], 
            [1311848214,90] 
        ] 
    }); 

    Ext.create('Ext.Window', { 
        width: 800, 
        height: 600, 
        title: 'Test Chart', 
        renderTo: Ext.getBody(), 
        layout: 'fit', 
        items: { 
            xtype: 'chart', 
            store: store, 
            axes: [{ 
                type: 'Numeric', 
                position: 'left', 
                fields: ['data'] 
            },{ 
                type: 'Time', 
                position: 'bottom', 
                fields: ['datetime'], 
                dateFormat: 'Md,H:i' 
            }], 
            series: [{ 
                type: 'line', 
                axis: 'left', 
                xField: 'datetime', 
                yField: 'data', 
                tips: { 
                    width: "6em", 
                    renderer: function(storeItem, item) { 
                        this.setTitle(storeItem.get('data') + '@' + Ext.Date.format(storeItem.get('datetime'), 'H:i')); 
                    } 
                } 
            }] 
        } 
    }).show(); 
});

重现该问题的一种简单方法是转至http://dev.sencha.com/deploy/ext-4.0.2a/examples/charts/Line.html(我使用的是 Firefox,但 Chrome 也无法使用)。加载页面后,关闭示例窗口,然后可以将上面的代码复制粘贴到 firebug 的控制台中。您应该会看到没有绘制图表并且发生了错误。

【问题讨论】:

    标签: charts extjs4 linechart


    【解决方案1】:

    事实证明,ExtJS 的时间轴确实有问题,并且总是试图聚合你的数据(我不想要),并且还有一些其他错误(比如商店中的日期字段的名称必须是 'date '。)我创建了一张票来查看这个问题,他们已经确定他们需要解决这个问题。

    我最终做的是使用数字轴,传入时间戳,并使用标签渲染器将它们显示为日期。

    Ext.require('Ext.chart.*');
    Ext.require(['Ext.Window', 'Ext.layout.container.Fit']);
    Ext.onReady(function () {
        var store = new Ext.data.ArrayStore({
            fields: ['tstamp', 'data'],
            data: [
                [1311800196, 95], // Jul 28 2011 02:09:56 GMT-0700 (Pacific Daylight Time)
                [1311844196, 47], // Jul 28 2011 02:09:56 GMT-0700 (Pacific Daylight Time)
                [1311846214, 68], // Jul 28 2011 02:43:34 GMT-0700 (Pacific Daylight Time)
                [1311848214, 90]  // Jul 28 2011 03:16:54 GMT-0700 (Pacific Daylight Time)
            ]
        });
    
        Ext.create('Ext.Window', {
            width: 800,
            height: 600,
            title: 'Test Chart - Dates along the x axis',
            renderTo: Ext.getBody(),
            layout: 'fit',
            items: {
                xtype: 'chart',
                store: store,
                axes: [{
                    type: 'Numeric',
                    position: 'left',
                    fields: ['data']
                },{
                    type: 'Numeric',
                    position: 'bottom',
                    fields: ['tstamp'],
                    minimum: 1311800196, // Same as the first point
                    maximum: 1311848214, //Same as the last point
                    roundToDecimal: false, // required so it won't mess with my renderer
                    label: {
                        renderer: function(value) {
                            var date = new Date(value * 1000);
                            return Ext.Date.format(date, "H:i") + "\n" + Ext.Date.format(date, "M j") ;
                        }
                    }
                }],
                series: [{
                    type: 'line',
                    axis: 'left',
                    xField: 'tstamp',
                    yField: 'data',
                    tips: {
                        width: "6em",
                        renderer: function(storeItem, item) {
                            this.setTitle(storeItem.get('data') + '@' + Ext.Date.format(new Date(storeItem.get('tstamp')*1000), 'H:i'));
                        }
                    }
                }]
            }
        }).show();
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多