ExtJS:网格和图表之间的共享存储

时间:2011-12-08 12:51:32

标签: javascript extjs charts extjs4

我正在编写一个存储和显示带时间戳的消息的简单应用程序。消息是JSON对象,包含2个主要字段,如:

{
  "emitted": "2011-12-08 12:00:00",
  "message": "This is message #666"
}

我有一个模型来描述这些消息:

Ext.define('Message', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'emitted', type: 'date'   },
        { name: 'message', type: 'string' }
    ]
});

我在网格中显示这些消息没有问题。但是,我现在想在图表中显示这些消息。例如,我可以抓取数字(如上例中的#666)并显示折线图。

理想情况下,我不想为图表创建新商店,我想重用相同的邮件存储,但在字段上应用过滤器以获取正确的值。我不知道,看起来像是什么:

var chart = {
    xtype:   'chart',
    ...
    series: [{
        type:   'line',
        axis:   ['left', 'bottom'],
        xField: 'emitted',
        yField: {fieldName:'message', fieldGrabber: function(v) {
            new RegExp("This is message #(\d+)$", "g").exec(v)[1]
        }}
    }]
};

在ExtJS中这种事情是否可行? 我只是想解释一下我想要做什么,我不知道在哪里可以找到这样的功能:在图表类中,在商店类中,或者使用商店的类型pf代理。

旁注: 我不能要求将数据格式化为服务器。我收到的消息不会在任何地方备份,它们只是通过socketIO流式传输到客户端的实时事件。

非常感谢任何建议!

2 个答案:

答案 0 :(得分:2)

您应该将模型中的值提取到单独的字段:

Ext.define('Message', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'emitted', type: 'date'   },
        { name: 'message', type: 'string' },
        { name: 'nr', convert: function(v, r){
            return r.get('message').replace(/^.*#/, '');
        } }
    ]
});

或者你可能最好只使用'nr'字段并在Grid中使用渲染器将其显示为“This is message#{nr}”。

然后您可以直接在图表中使用'nr'字段。

答案 1 :(得分:-1)

我切换到Highcharts并将ExtJS扔到垃圾桶里:P