extjs 4 chart 时间轴格式的处理
来源:互联网 发布:linux鸟哥私房菜 pdf 编辑:程序博客网 时间:2024/05/06 16:29
var
dayStore = Ext.create(
'Ext.data.JsonStore'
, {
fields: [{ name:
'name'
, type:
'date'
, dateFormat:
'Y-m-d H:i:s'
},
'data'
],
//Field Array, name用date类型
proxy: {
type:
'ajax'
,
url :
'HistoryChart'
}
});
var
dayHistogram = Ext.create(
'Ext.panel.Panel'
, {
layout:
'fit'
,
listeners: {
'afterrender'
:
function
(comp) {
//添加一个LoadMask,当dayStore加载数据的时候在Panel上显示LoadMask
new
Ext.LoadMask(comp.getEl(), { store: dayStore });
}
},
items: {
xtype:
'chart'
,
//xtype chart
id:
'dayChart'
,
animate:
true
,
//动画效果
store: dayStore,
//对应的store
axes: [{
//坐标轴定义
type:
'Numeric'
,
//数据类型坐标轴
position:
'left'
,
//左边,纵坐标
fields:
'data'
,
//绑定对应dayStore中的Field
title:
'Power(W)'
,
//坐标轴名称
minimum: 0,
//坐标轴最小值
grid:
true
//是否在图表上显示横向网格
}, {
type:
'Time'
,
//Time类型坐标轴,时间轴
position:
'bottom'
,
//作为横坐标显示
fields:
'name'
,
//为该坐标轴绑定dayStore中的 "name" Field
step: [Ext.Date.MINUTE, 30],
//时间轴,坐标点,步进距离
dateFormat:
'H:i'
,
//坐标轴刻度格式化
groupBy:
'year,month,day,hour,minute,second'
,
//忘记了,应该是精确度吧,API中已经没有相关说明,或者可以不要了
aggregateOp:
'sum'
,
//忘记了。。或者一直没弄懂过, 原谅我。。。API中已经没有相关说明,或者可以不要了
fromDate: historyDayFromDate,
//JavaScript Date对象,起始日期
toDate: historyDaytoDate,
//JavaScript Date对象,截止日期
grid:
true
//是否显示纵向网格
}],
series: [{
type:
'line'
,
axis: [
'left'
,
'bottom'
],
//4.0早起的版本貌似只写"left"就好,4.0.7貌似一定要写两个,不然会出错,官方例子也改了
smooth:
true
,
//字面理解,平滑曲线或者转折明显的曲线
fill:
true
,
//曲线内部是否填充颜色
tips: {
//鼠标移动到曲线图的点上时显示的提示信息,如图中11:52:30
trackMouse:
true
,
//实时追踪鼠标
width: 80,
//提示面板宽度
height: 40,
//提示面板高度
renderer:
function
(storeItem, item) {
//格式化呈现数据的方法
var
timeText = Ext.Date.format(storeItem.get(
'name'
),
'H:i:s'
);
this
.setTitle(storeItem.get(
'data'
) +
' W<br />'
+ timeText);
}
},
highlight: {
//鼠标移动到点上的时候的显示样式
size: 4,
//忘了
radius: 4
//点半径
},
style: {
//曲线样式,参数比较多参考API
'stroke-width'
: 2
//定义曲线粗细
},
markerConfig: {
//详细参数请参考API
radius: 1
//曲线图上点的样式
},
xField:
'name'
,
yField:
'data'
}]
}
});
var
historyDayTimeAxis =
false
;
//存储时间轴对象
var
historyDayFromDate =
new
Date();
//时间轴起始时间
var
historyDaytoDate =
new
Date();
//时间轴截止时间
var
dayChartShow =
true
;
//控制是否显示曲线图上数据的变量
function
loadDayData() {
//重新加载曲线图数据
var
yearMonthText = selectedYearStoreItem.get(
'name'
);
if
(yearMonthText !=
null
&& yearMonthText.length == 6) {
yearMonthText = yearMonthText.substring(0, 5) +
'0'
+ yearMonthText.substr(5);
//从其他图表获取年月信息的格式化字串
}
var
dayText = selectedMonthStoreItem.get(
'name'
);
if
(dayText < 10) {
dayText =
'0'
+ dayText;
//从其他图表数据获取格式化过的日期数据
}
var
dateText = yearMonthText +
'.'
+ dayText;
//整合出当天的年月日信息
var
datehistoryFrom = Ext.Date.parse(dateText,
"Y.m.d"
);
//格式化成Javascript的Date对象
var
datehistoryTo = Ext.Date.parse(dateText,
"Y.m.d"
);
//格式化成Javascript的Date对象
datehistoryTo.setHours(23, 30, 0, 0);
//将当天截止时间的对象设置为晚上11点半
if
(historyDayTimeAxis) {
//检测时间轴是否已经初始化
historyDayTimeAxis.fromDate = datehistoryFrom;
//重置时间轴的起始时间
historyDayTimeAxis.toDate = datehistoryTo;
//重置时间轴的结束时间
}
dayStore.load({
//重新加载dayStore中的数据,新加载的数据会自动替换掉原来的图形
//但是4.0.7版本疑似有一个BUG,如果新加载的数据为空的话,之前的曲线图不会消失,下面的代码有解决方案
params: {
//取数据HTTP里的参数
param:
'day'
,
nodeId: getCurrentNodeId(),
date: dateText
},
callback:
function
(records) {
//成功获取到数据后的回调函数,处理数据为空时之前的曲线图不会消失的BUG
if
(records.length > 0) {
//如果数据集不为空
if
(!dayChartShow) {
Ext.getCmp(
'dayChart'
).series.get(0).showAll();
//显示曲线
dayChartShow =
true
;
}
}
else
if
(dayChartShow) {
//如果数据集为空,并且之前已经有曲线在显示
Ext.getCmp(
'dayChart'
).series.get(0).hideAll();
//隐藏之前的曲线图,曲线救国策略
dayChartShow =
false
;
}
}
});
}
//最后需要在上面的组件加载完毕后,运行初始化时间轴对象的语句
historyDayTimeAxis = Ext.getCmp(
'dayChart'
).axes.get(1);
2. Server端实现
详细的逻辑因为源代码部分处理比较复杂,就不写了,展示部分关键代码结构,完整结构请参考另一篇柱状图的文章。
obj.put(WebConstants.NAME, DateTool.formatDate(midCalendar.getTime()));
//"name", "2012-09-20 13:42:30"
obj.put(WebConstants.DATA, pacAvg);
dataArray.add(obj);
最终反馈给Web端的数据如下:
[{"name":"2012-09-20 10:47:30","data":15484.6},{"name":"2012-09-20 10:52:30","data":15484.6},{"name":"2012-09-20 10:57:30","data":15484.6},{"name":"2012-09-20 11:02:30","data":15484.6},{"name":"2012-09-20 11:07:30","data":15484.6},{"name":"2012-09-20 11:12:30","data":0},{"name":"2012-09-20 11:17:30","data":0},{"name":"2012-09-20 11:22:30","data":0},{"name":"2012-09-20 11:27:30","data":0},{"name":"2012-09-20 11:32:30","data":0},{"name":"2012-09-20 11:37:30","data":9282.2},{"name":"2012-09-20 11:42:30","data":18869.8},{"name":"2012-09-20 11:47:30","data":594},{"name":"2012-09-20 11:52:30","data":17729.2},{"name":"2012-09-20 11:57:30","data":18821.3},{"name":"2012-09-20 12:02:30","data":17393.3},{"name":"2012-09-20 12:07:30","data":19075.2},{"name":"2012-09-20 12:12:30","data":17564.8},{"name":"2012-09-20 12:17:30","data":18909.7},{"name":"2012-09-20 12:22:30","data":18270.9},{"name":"2012-09-20 12:27:30","data":18413.1},{"name":"2012-09-20 12:32:30","data":19156.4},{"name":"2012-09-20 12:37:30","data":20013.4},{"name":"2012-09-20 12:42:30","data":17941.8},{"name":"2012-09-20 12:47:30","data":343.3},{"name":"2012-09-20 12:52:30","data":20080.2},{"name":"2012-09-20 12:57:30","data":0},{"name":"2012-09-20 13:02:30","data":0},{"name":"2012-09-20 13:07:30","data":0},{"name":"2012-09-20 13:12:30","data":0},{"name":"2012-09-20 13:17:30","data":0},{"name":"2012-09-20 13:22:30","data":0},{"name":"2012-09-20 13:27:30","data":0},{"name":"2012-09-20 13:32:30","data":0},{"name":"2012-09-20 13:37:30","data":0},{"name":"2012-09-20 13:42:30","data":0},{"name":"2012-09-20 13:47:30","data":0},{"name":"2012-09-20 13:52:30","data":19893.5}]
因为我们在dayStore中定义了”name” Field的类型为date,及与上面数据相同的日期格式,所以上面的日期字串会被自动解析为Javascript的Date对象,用与在时间轴中精确显示其实际位置。
因为项目需要,示例中的时间点都是固定间隔的,实际应用中你可以定位到任意一个点。
另外Extjs4的Time axis中有一个constrain参数,该参数标识如果接收到的数据时间点超过了时间轴的起始点,那么该点是否显示出来,该参数默认值为false。
- extjs 4 chart 时间轴格式的处理
- extjs 4 chart 时间轴格式的处理
- 时间格式的处理
- ExtJs 时间格式
- Extjs设置时间格式
- ExtJS Grid的两个格式处理方法
- extjs 4 chart 使用 后台发送的json数据画图
- C# 时间格式的处理
- jackson时间格式的处理
- Extjs Chart
- json时间格式(时间戳)转成Extjs日期格式(grid字段的时间)
- Extjs实现年月日时分秒格式的时间选择器
- 发现ExtJs Chart的一个Bug
- EXTJS动态刷新chart的fields
- EXTJS 4 chart图表样式汇总
- c#处理时间格式的方法
- 关于时间格式的一些处理方法
- ORACL中对时间格式的处理
- svn
- 所谓Android Copybit--寥寥数语
- 活了这么多年,才发现我的语文是体育老师教的
- 9、SQL Server 使用联接和联合合并数据
- 兼容Xml中的乱码
- extjs 4 chart 时间轴格式的处理
- rqnoj02 开心的金明(dp,01背包)
- 10、SQL Server 使用联接和联合合并数据之联接
- Binary Tree Inorder Traversal
- 简单而又完整的Makefile
- 11、SQL Server 使用联接和联合合并数据之联合
- 12、SQL Server 使用子查询和CTE提供数据
- 跟我一起写Makefile:MakeFile介绍
- 13、SQL Server 使用子查询和CTE提供数据之简单子查询