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(一)
推荐阅读
本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ...
[详细]
蜡笔小新 2024-12-23 01:27:41
本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ...
[详细]
蜡笔小新 2024-12-22 15:17:55
本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ...
[详细]
蜡笔小新 2024-12-22 19:27:56
在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ...
[详细]
蜡笔小新 2024-12-22 17:30:25
本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ...
[详细]
蜡笔小新 2024-12-22 13:38:48
本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ...
[详细]
蜡笔小新 2024-12-22 23:56:09
本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ...
[详细]
蜡笔小新 2024-12-22 19:07:42
在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ...
[详细]
蜡笔小新 2024-12-22 17:14:01
2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ...
[详细]
蜡笔小新 2024-12-22 16:09:09
本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ...
[详细]
蜡笔小新 2024-12-22 13:22:19
本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ...
[详细]
蜡笔小新 2024-12-22 12:55:37
对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ...
[详细]
蜡笔小新 2024-12-22 11:02:41
本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ...
[详细]
蜡笔小新 2024-12-22 09:42:30
本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ...
[详细]
蜡笔小新 2024-12-22 00:56:21
本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ...
[详细]
蜡笔小新 2024-12-21 19:39:55