令人头痛的ExtJS日期时间控件
1 缘由
Ext提供了日期、时间的控件,但没有将日期和时间组合在一起的控件。在网上搜索时,有前辈创建或重写了时间相关的类,并提供了源码。不得不说那位作者对 extjs 框架理解得很透彻,虽然不知道他当时是怎样研究的,但不得不服啊。
之前网上提供的代码,我没有详细研究重写的实现方法。但我不太赞成之前的路径组织或者架构的实现方式。因为要使用这个起始结束时间控件,需要在一个页面中包含好几个js文件,这多不方便啊。经常遇到的情况是,纠结了半天,调试了半天,最后才发现少包含了一个 js 文件。况且,extjs 拥有 这么强大的类使用框架,不利用下岂不可惜。所以,我现在采用的解决办法:将这些类都重新命名,并依此放到对应的文件路径上。能够解决这个问题,非常感谢我同事GW的帮助。当时,我实在是被这几个文件中的命名方式弄得晕头转向。现在的解决办法是我自认为比较满意的了。
2 使用方法
原来CSDN的博客不能添加附件,所以,我将示例代码防到http://download.csdn.net/detail/lvye1221/5999545了.
我在 apache 目录下部署了测试示例。将附件中的测试用例,按照以下方式部署好,即可成功访问:
apache 根目录包含: extjs 4.0.7 的文件夹,再新建一个测试用的文件夹 test-form, 根目录的目录列表如下所示:
ext-4.0.7-gpl
test-form/
test-form 文件夹里的列表如下所示,即为解压后的测试示例代码。
test-container.html
zhiyuan/
部署成功后,访问地址为: [http://localhost/test-form/test-container.html] 即可看到如下效果:
当然,上述部署的方式只是为了配合 test-container.html 中能够让代码找到正确的库文件,同时部署在 apache 也只是我个人比较偏爱的方式。读者可以采用自己的方式即可。但如果按照上述的方式部署是测试通过的。
3 部分问题及解决
3.1 label和时间框不在一行?
采用新的路径组织的结构,发现在测试代码中出现如下图所示的情况,标题、时间框、选择按钮,三个不位于同一行,但是,在工作项目中使用时,却出现了满意的情况。
未对齐的情况
项目中对齐的情况
猜测是引用的CSS样式问题,这时发现我的测试代码中是引用的 extjs 4.1 的样式,而实际项目中所采用的是 extjs 4.0.7 版本,同时,测试用例和实际项目都是所采用 extjs 4.0.7 版本的代码。找到原因就好办了,参照项目将 CSS 文件替换过来,问题就解决了。
再想深一些,如果不是存在参照项目中的代码,那么遇到这种问题真的有些不知所措,通过浏览器的元素查看器,会发现时间控件的宽度一直都固定在225,不管我怎样修改控件的总体宽度,但中间存在议程 x-box-inner 的宽度一直都是 255,这样,因为放不下元素,所以它们就竖排并列显示了。
可能还可以考虑继续找下去,v4.0.7 和 v4.1 两者之间的 css 文件到底是相差了什么呢?为什么会造成生成的 DOM 元素的宽度被限制下了。这可能需要花费更多的时间来研究。如果有读者知道原因,请在留言中告诉我,谢谢。
3.2 只显示一个时间选择控件
当我们只需要提供一个日期时间控件,而不是同时包含起始和结束这样中间的控件时,怎么办呢?我当时直接使用 DateTime 控件,日期倒是设置成了当前日期,但是却时间却是一片空白。并且整个控件在加载时就将已经弹出显示了。
通过查看提供起始时间和结束时间的控件代码,找到了。
myContainer.add({
xtype: 'datetimefield',
format: 'Y-m-d H:i:s'
});
Ext.create('zhiyuan.form.DateTimeField', {
renderTo: 'dateTimePicker',
format: 'Y-m-d H:i:s'
});
4 总结
在遇到问题时,能够主动去搜索解决办法来解决问题,这是很不错的。只是在团队合作中,真不能随便更改大家一起使用的库文件,如果随意更改或删除一些文件,将会给其他正在使用的同事造成很大的麻烦,他不知道这个库被修改了,花费很多时间来找出错的原因。又或者他知道被修改了,但是修改的文件不能完全适用他的情况,他将会要花费更多的时间来修改。不管怎样,这两种情况都会让同事很不爽的。
在探索解决实现日期和时间同时选的过程中,我发现解决网页问题的流程是:先网上搜索,能够让网上的示例跑起来;发现别人写的不好,对参考代码进行修改;最后发现自己写的不好,再进行修改。只是这段过程有些漫长,还时不时遇到一些头痛的问题。为什么会头痛呢?其实是因为对编程的语言和不熟悉库的使用情况。当解决完问题后,就不头痛了,就高兴啦。
当然,不要只顾着高兴了,在解决完一个问题时,一定要对问题进行及时的整理。解决遇到的这个问题时,总觉得这个问题很简单,而觉得没有必要整理,但当再次遇到这个问题时,发现完全不知道解决办法,这就会让人很头大。因为我就有这样的经历,当时解决这个时间控件路径的问题,但没有及时整理,等这次再需要解决同样的问题时,居然一点都不记得了,又重新解决并痛苦了一遍,这也是我写这篇博客的原因。
5 最近的感悟
八月过了2/3多了,我才发表了一篇博客,这样可不行。当然,可以说项目太紧,下班后太累……,找这样一大堆借口的借口是没有意义的。一定坚持写博客,自己定的计划是每个月至少四篇博客(嘿嘿,这样就可以一直得到持之以恒奖了)。顺便将最近的一些做项目的感悟写在这了。
当有需要增加新的需求时,通常我们就会加一点代码,再或者修改功能时候再加一点代码。其实也没什么特别好的办法,因为添加代码可以很快地实现需求。可是一定不要忘记:在项目有空余时间的时候好好地整理代码,能简化地就简化,能删除的就删除。可通常情况下,我们好像只要解决了问题,谁还记得当时很粗糙的代码需要修改呢?我想,优秀的程序员是知道的。
又想对我的程序员人生发发感叹了,有时真觉得我们不需要太聪明,只需要多多记录,多多思考,多花点有用时间来学习即可。人生有很多的事情,程序、音乐、演讲、爱情、家庭,只要自己真心付出了,恰当地使用利用好时间,就会有收获,就会成功。加油!
令人头痛的ExtJS日期时间控件的更多相关文章
- jquery日期时间控件
代码下载地址: jquery日期时间控件下载地址 . 工作中用到, 这里分享一下, 避免重复摸索劳动. 一. HTML 文件 <!DOCTYPE HTML PUBLIC "- ...
- 学习日期时间控件 daterangepicker
aterangepicker 是一款日期时间控件,可选择“年,月,日,时,分,秒”,可选择单面板,也可选择双面板(起止时间). 单面板示例:daterangepicker 单面板 codepen 在线 ...
- jquery-ui日期时间控件实现
日期控件和时间控件为独立控件,日期时间控件要同一时候导入日期控件和时间控件的js,然后在日期控件加入时间控件显示參数,没有导入时间控件js.日期控件函数设置的时间控件參将包错 日期控件官网网址:htt ...
- Android日期时间控件DatePickerDialog和TimePickerDialog
1.DatePickerDialog 在一些万年历.日程表等APP上我们经常可以看到日期选择控件,由于很少有用户会老老实实的手工输入日期,所以该控件的作用就是为了控制用户的输入格式,在Android中 ...
- jquery datetimepicker 日期时间控件的使用及参数说明
首先下载 jquery.datetimepicker.css jquery.datetimepicker.main.js 1. 引入css和js (注:该控件要依赖于jquery) <link ...
- Extjs4 DateTimeField,日期时间控件完美版
网上若干类似的控件,要么是有bug,要么是操作体验不合理,这里贡献一个比较科学的版本. 扩展包下载: http://files.cnblogs.com/qidian10/Ext.ux.rar 解压至E ...
- 小程序实现日期时间控件picker
小程序自带的组件中有日期跟时间的picker,但就缺个日期时间picker组件,那没办法,只能自己弄一个,这个组件不是很难,比较难的地方是要根据不同年份(是否闰年)跟月份决定一个月里有多少天. 我直接 ...
- ECSTORE日期时间控件转换为时间戳的方法
如果你在后台使用<{input type=”time” name=”time”}>的话,后台获取到的表单数据为: ["_DTYPE_TIME"]=> array( ...
- iOS 日期时间控件
UIDatePicker *picker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 0,[UIParam widthScreen] ,50 ...
随机推荐
- Mono For Android离线激活
我们之前创建过Mono For Android的开发环境,但是使用一段时间后就说明证书过期,那如何破解呢? 但我说的这个也就只能使用免费的证书. 首先下载免费的证书,monoandroid.licx, ...
- c++逆向 vector
最近弄Android c/c++方面的逆向,发现c++的类,stl模板,在逆向的时候相比c语言都带来了不小的困难. 今天自己写了个小程序,然后逆向分析了一下 vector<int> arr ...
- 笔试之Linux命令的使用
1. awk文本处理工具,显示ps的最后两列 ps -ef|awk '{print $1,$2}' 打印第一和第二域 $0是全域 2. Linux下查看内存使用情况 free
- css3响应式布局
响应式布局 分栏布局,-webkit-column-width(定义每栏的宽度,会根据每栏宽度自动分成若干栏) <style> .wrap {width: 900px; border: 1 ...
- (转)Call to undefined function mb_convert_encoding()
需要先enable mbstring 扩展库 在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉mb_convert_encoding 可以指定多种输入编 ...
- sql server identity限制
identity属性是依赖于表的,它不是一种独立的序列机制,不能随意使用它生成新值. 标识值是在insert语句执行时生成的,不是在执行之前生成的. identity属性是以异步的方式分配标识值.这意 ...
- Linux下登陆mysql服务器不需要输入账号密码信息
linux下登录mysql服务器一般都是在命令行手动输入链接信息 [root@localhost ~]# mysql -hlocalhost -uroot -p11111 而在mysql 5.6之后版 ...
- Linux安装配置mongodb
1. 下载MongoDB 2. 解压文件到某目录下,然后重命名: [root@localhost var]# tar -xzvf mongodb-linux-i686-2.0.1.tar [root@ ...
- dbms_job dbms_scheduler简单比较
---------------------------陈旧的-------------------------------------/*--------------------- 创建job --- ...
- iOS面试题整理(一)
代码规范 这是一个重点考察项,曾经在微博上发过一个风格纠错题: 也曾在面试时让人当场改过,槽点不少,能够有 10 处以上修改的就基本达到标准了(处女座的人在这方面表现都很优秀 一个区分度很大的面试题 ...