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(一)
推荐阅读
本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ...
[详细]
蜡笔小新 2023-12-14 18:18:21
本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ...
[详细]
蜡笔小新 2023-12-13 20:01:16
蜡笔小新 2023-12-14 19:14:56
本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ...
[详细]
蜡笔小新 2023-12-14 18:45:00
本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ...
[详细]
蜡笔小新 2023-12-14 17:15:38
本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ...
[详细]
蜡笔小新 2023-12-14 17:06:58
目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ...
[详细]
蜡笔小新 2023-12-14 15:03:14
本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ...
[详细]
蜡笔小新 2023-12-14 14:37:52
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ...
[详细]
蜡笔小新 2023-12-14 10:20:38
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ...
[详细]
蜡笔小新 2023-12-14 10:06:19
本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ...
[详细]
蜡笔小新 2023-12-13 21:31:18
本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ...
[详细]
蜡笔小新 2023-12-13 21:23:45
1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ...
[详细]
蜡笔小新 2023-12-13 19:12:25