ExtJS中提供了下拉日期选择控件Ext.form.field.Date与下拉时间选择控件Ext.form.field.Time。不过没有一个在选择日期时选择时间的控件datetimefield。目的就是运用自定义组件的方法,来扩展下拉日期选择控件Ext.form.field.Date,在下拉框中添加时间选择的组件。目标效果:
1 Ext.define(‘My.picker.DateTime‘, {
2 extend: ‘Ext.picker.Date‘,
3 alias: ‘widget.datetimepicker‘,
4 okText:‘确定‘,
5 okTip:‘确定‘,
6
7 renderTpl: [
8 ‘‘
,
9 ‘‘
,
14 ‘
‘,
15 ‘‘,
16 ‘‘,
17 ‘‘,
18 ‘{.:this.firstInitial}
‘,
19 ‘ ‘,
20 ‘ ‘,
21 ‘ ‘,
22 ‘‘,
23 ‘‘,
24 ‘{#:this.isEndOfWeek}‘,
25 ‘‘,
26 // The ‘#‘ is needed for keyboard navigation
27 ‘‘,
28 ‘ ‘,
29 ‘ ‘,
30 ‘ ‘,
31 ‘
‘
,
32 ‘
‘,
33 ‘‘,
34 ‘ ‘
,
35 ‘
‘,
36 {
37 firstInitial: function (value) {
38 return Ext.picker.Date.prototype.getDayInitial(value);
39 },
40 isEndOfWeek: function (value) {
41 // convert from 1 based index to 0 based
42 // by decrementing value once.
43 value--;
44 var end = value % 7 === 0 && value !== 0;
45 return end ? ‘‘ : ‘‘;
46 },
47 renderTodayBtn: function (values, out) {
48 Ext.DomHelper.generateMarkup(values.$comp.todayBtn.getRenderTree(), out);
49 },
50 renderMonthBtn: function (values, out) {
51 Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out);
52 }
53 }
54 ]
55 });
其中renderTpl部分与后面按钮渲染部分出自源码。
效果:
第二步:在原布局中添加3个spinner组件用来选取时、分、秒,添加一个确认按钮,并在组件渲染之前,将自定义添加的时、分、秒和确认按钮进行初始化
1 Ext.define(‘My.picker.DateTime‘, {
2 extend: ‘Ext.picker.Date‘,
3 alias: ‘widget.datetimepicker‘,
4 okText:‘确定‘,
5 okTip:‘确定‘,
6
7 renderTpl: [
8 ‘‘
,
9 ‘‘
,
14 ‘
‘,
15 ‘‘,
16 ‘‘,
17 ‘‘,
18 ‘{.:this.firstInitial}
‘,
19 ‘ ‘,
20 ‘ ‘,
21 ‘ ‘,
22 ‘‘,
23 ‘‘,
24 ‘{#:this.isEndOfWeek}‘,
25 ‘‘,
26 // The ‘#‘ is needed for keyboard navigation
27 ‘‘,
28 ‘ ‘,
29 ‘ ‘,
30 ‘ ‘,
31
32 ‘‘,
33 ‘‘,
34 ‘{%this.renderHourBtn(values,out)%} ‘,
35 ‘{%this.renderMinuteBtn(values,out)%} ‘,
36 ‘{%this.renderSecondBtn(values,out)%} ‘,
37 ‘ ‘,
38 ‘
‘,
39
40 ‘‘,
41 ‘‘,
42 ‘ ‘,
43 ‘‘,
44 {
45 firstInitial: function (value) {
46 return Ext.picker.Date.prototype.getDayInitial(value);
47 },
48 isEndOfWeek: function (value) {
49 // convert from 1 based index to 0 based
50 // by decrementing value once.
51 value--;
52 var end = value % 7 === 0 && value !== 0;
53 return end ? ‘‘ : ‘‘;
54 },
55 renderTodayBtn: function (values, out) {
56 Ext.DomHelper.generateMarkup(values.$comp.todayBtn.getRenderTree(), out);
57 },
58 renderMonthBtn: function (values, out) {
59 Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out);
60 },
61 renderHourBtn: function (values, out) {
62 Ext.DomHelper.generateMarkup(values.$comp.hourBtn.getRenderTree(), out);
63 },
64 renderMinuteBtn: function (values, out) {
65 Ext.DomHelper.generateMarkup(values.$comp.minuteBtn.getRenderTree(), out);
66 },
67 renderSecondBtn: function (values, out) {
68 Ext.DomHelper.generateMarkup(values.$comp.secondBtn.getRenderTree(), out);
69 },
70 renderOkBtn: function (values, out) {
71 Ext.DomHelper.generateMarkup(values.$comp.okBtn.getRenderTree(), out);
72 }
73 }
74 ],
75 beforeRender: function () {
76 var me = this ,_$Number=Ext.form.field.Number;
77 me.hourBtn=new _$Number({
78 minValue:0,
79 maxValue:23,
80 step:1,
81 width:55
82 });
83 me.minuteBtn=new _$Number({
84 minValue:0,
85 maxValue:59,
86 step:1,
87 width:70,
88 labelWidth:10,
89 fieldLabel:‘ ‘
90 });
91 me.secOndBtn=new _$Number({
92 minValue:0,
93 maxValue:59,
94 step:1,
95 width:70,
96 labelWidth:10,
97 fieldLabel:‘ ‘
98 });
99
100 me.okBtn = new Ext.button.Button({
101 ownerCt: me,
102 ownerLayout: me.getComponentLayout(),
103 text: me.okText,
104 tooltip: me.okTip,
105 tooltipType:‘title‘,
106 handler:me.okHandler,
107 scope: me
108 });
109 me.callParent();
110 }
111 });
效果:
第三步:添加按钮事件绑定,各种内部逻辑的处理,获取选定的时间等等
【ExtJS】自定义组件datetimefield(一)
推荐阅读
本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ...
[详细]
蜡笔小新 2024-12-27 16:33:32
2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ...
[详细]
蜡笔小新 2024-12-28 11:58:48
本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ...
[详细]
蜡笔小新 2024-12-27 14:38:54
QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ...
[详细]
蜡笔小新 2024-12-28 12:33:18
尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ...
[详细]
蜡笔小新 2024-12-28 11:12:44
本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 09:49:42
本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ...
[详细]
蜡笔小新 2024-12-28 02:40:28
本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ...
[详细]
蜡笔小新 2024-12-27 20:40:29
本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ...
[详细]
蜡笔小新 2024-12-27 12:34:14
理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ...
[详细]
蜡笔小新 2024-12-27 12:06:47
几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ...
[详细]
蜡笔小新 2024-12-27 10:46:07
本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ...
[详细]
蜡笔小新 2024-12-27 10:44:39
本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ...
[详细]
蜡笔小新 2024-12-27 10:36:44
本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ...
[详细]
蜡笔小新 2024-12-27 02:22:09
本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ...
[详细]
蜡笔小新 2024-12-26 21:04:46