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日期时间控件的更多相关文章

  1. jquery日期时间控件

    代码下载地址:  jquery日期时间控件下载地址 .  工作中用到, 这里分享一下, 避免重复摸索劳动. 一. HTML 文件    <!DOCTYPE HTML PUBLIC "- ...

  2. 学习日期时间控件 daterangepicker

    aterangepicker 是一款日期时间控件,可选择“年,月,日,时,分,秒”,可选择单面板,也可选择双面板(起止时间). 单面板示例:daterangepicker 单面板 codepen 在线 ...

  3. jquery-ui日期时间控件实现

    日期控件和时间控件为独立控件,日期时间控件要同一时候导入日期控件和时间控件的js,然后在日期控件加入时间控件显示參数,没有导入时间控件js.日期控件函数设置的时间控件參将包错 日期控件官网网址:htt ...

  4. Android日期时间控件DatePickerDialog和TimePickerDialog

    1.DatePickerDialog 在一些万年历.日程表等APP上我们经常可以看到日期选择控件,由于很少有用户会老老实实的手工输入日期,所以该控件的作用就是为了控制用户的输入格式,在Android中 ...

  5. jquery datetimepicker 日期时间控件的使用及参数说明

    首先下载 jquery.datetimepicker.css jquery.datetimepicker.main.js 1. 引入css和js (注:该控件要依赖于jquery) <link ...

  6. Extjs4 DateTimeField,日期时间控件完美版

    网上若干类似的控件,要么是有bug,要么是操作体验不合理,这里贡献一个比较科学的版本. 扩展包下载: http://files.cnblogs.com/qidian10/Ext.ux.rar 解压至E ...

  7. 小程序实现日期时间控件picker

    小程序自带的组件中有日期跟时间的picker,但就缺个日期时间picker组件,那没办法,只能自己弄一个,这个组件不是很难,比较难的地方是要根据不同年份(是否闰年)跟月份决定一个月里有多少天. 我直接 ...

  8. ECSTORE日期时间控件转换为时间戳的方法

    如果你在后台使用<{input type=”time” name=”time”}>的话,后台获取到的表单数据为: ["_DTYPE_TIME"]=> array( ...

  9. iOS 日期时间控件

    UIDatePicker *picker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 0,[UIParam widthScreen] ,50 ...

随机推荐

  1. NuGet 无法连接到远程服务器-解决方法

    一. Entity Framework以下简称EF 安装EF4.3的步骤是首先安装VS扩展 NuGet,然后再使用NuGet安装EF程序包 安装完NuGet就可以安装EF了,有两种方式可以安装EF: ...

  2. 基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分。 http://www.makersoft.org

    https://github.com/makersoft/mybatis-shards MyBatis-Shards 专业的MyBatis数据库切分框架 MyBatis Shards简介 MyBati ...

  3. PHP 函数的“引用返回”概念释疑(转)

    很多时候我们会看到这样的代码(出自 CI 框架源码): 1 $class =& load_class('a','b'); 我们都知道其中的'&'是指引用,但是它的作用是什么呢?它能够解 ...

  4. Web站点架构设计考虑的因素

    转自http://blog.csdn.net/moshengtan/article/details/8990052 1    Web负载均衡 1.1 - 使用商业硬件实现 最经常使用的F5 与citr ...

  5. Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现

    1.开启新的Activity的方法: (1)Intent 意图 (2)intent.setAction("自定义")  记得在清单文件中声明 (3)intent.setData(前 ...

  6. java中-静态代码块、构造代码块、构造方法的联系

    例如该题: 1 class Fu{ static { System.out.println("这是父类静态代码块"); } { System.out.println("这 ...

  7. 9.2noip模拟试题

      题目名称 改造二叉树 数字对 交换 英文名称 binary pair swap 输入文件名 binary.in pair.in swap.in 输出文件名 binary.out pair.out ...

  8. prim 堆优化+ kruskal 按秩优化

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...

  9. C#解leetcode:119. Pascal's Triangle II

    题目是: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return  ...

  10. eclise -The method onClick(View) of type new View.OnClickListener(){} must override a superclass method

    在做arcgis android开发的时候,突然遇到这种错误,The method onClick(View) of type new View.OnClickListener(){} must ov ...