我正在编写一个存储和显示带时间戳的消息的简单应用程序。消息是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流式传输到客户端的实时事件。
非常感谢任何建议!
答案 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