当前位置: 首页 > news >正文

EXTJS项目实战经验总结一:日期组件的change事件:

1  依据选择的日期,加载相应的列表数据,如图:

      

 

开发说明

   1 开发思路: 在日期值变化的事件中获得选择后的日期值,传给后台,然后从后台加载相应的数据

 

    2 问题:在查看extjs2.2 的api的官方说明文档,文档对datefield组件的change事件说明如下:

       change : ( Ext.form.Field this, Mixed newValue, Mixed oldValue )
       Fires just before the field blurs if the field value has changed.

       这句话是说值发生变化,并且在失去焦点之前触发此事件,也就是说如果此日期组件的值发生变化,而焦点并没有失去,这个事件也就不会触发。通过我们的程序验证,事实也的确如此。我们需要值发生变化就要触发相应的事件。

    3 解决方法:

       从源头找事件:是用户点击相应的日期,才导致文本框里的值发生变换。可以捕获这个点击选择事件,通过这个事件我们得到日期值,传给后台,加载列表数据

    4 具体做法:

       继承Ext.form.DateField,覆盖menuListeners这个私有监听器属性,封装类如下:

     

Java代码  复制代码
  1. Ext.form.CustomDateField = Ext.extend(Ext.form.DateField,  {   
  2.     // private   
  3.     readOnly: true,   
  4.     setValueFn:null,   
  5.     menuListeners : {   
  6.         select: function(m, d){   
  7.             this.setValue(d);   
  8.             if(this.setValueFn)   
  9.                this.setValueFn.call(this,this.formatDate(this.parseDate(d)));   
  10.         },   
  11.         show : function(){   
  12.             this.onFocus();   
  13.         },   
  14.         hide : function(){   
  15.             this.focus.defer(10, this);   
  16.             var ml = this.menuListeners;   
  17.             this.menu.un("select", ml.select,  this);   
  18.             this.menu.un("show", ml.show,  this);   
  19.             this.menu.un("hide", ml.hide,  this);   
  20.         }   
  21.     }   
  22. });   
  23. Ext.reg('customDateField', Ext.form.CustomDateField);  
[java]  view plain copy
  1. Ext.form.CustomDateField = Ext.extend(Ext.form.DateField,  {  
  2.     // private  
  3.     readOnly: true,  
  4.     setValueFn:null,  
  5.     menuListeners : {  
  6.         select: function(m, d){  
  7.             this.setValue(d);  
  8.             if(this.setValueFn)  
  9.                this.setValueFn.call(this,this.formatDate(this.parseDate(d)));  
  10.         },  
  11.         show : function(){  
  12.             this.onFocus();  
  13.         },  
  14.         hide : function(){  
  15.             this.focus.defer(10, this);  
  16.             var ml = this.menuListeners;  
  17.             this.menu.un("select", ml.select,  this);  
  18.             this.menu.un("show", ml.show,  this);  
  19.             this.menu.un("hide", ml.hide,  this);  
  20.         }  
  21.     }  
  22. });  
  23. Ext.reg('customDateField', Ext.form.CustomDateField);  

 

 

 

 

      5 使用这个自定义的组件:

        

        例:

    

Java代码  复制代码
  1. {   
  2.                 fieldLabel : '计划开始日期',   
  3.                 vtype : 'isBlank',   
  4.                 xtype : 'datefield',   
  5.                 xtype : 'customDateField',   
  6.                 setValueFn:function(value){   
  7.                     alert(value);   
  8.                 },   
  9.                 format : 'Y-m-d'  
  10.             }  
[java]  view plain copy
  1. {  
  2.                 fieldLabel : '计划开始日期',  
  3.                 vtype : 'isBlank',  
  4.                 xtype : 'datefield',  
  5.                 xtype : 'customDateField',  
  6.                 setValueFn:function(value){  
  7.                     alert(value);  
  8.                 },  
  9.                 format : 'Y-m-d'  
  10.             }  

 

 

 

  这种方法不好的地方,就是覆盖了extjs提供的私有属性menuListeners,不知路过的朋友,有没有比较好的解决办法

相关文章:

  • [DevEpxress]GridControl 显示Gif动画
  • [逆向基础] 浮​点​数​到​二​进​制​的​转​换
  • 多线程:volatile
  • android网络编程——http post
  • linux文件和目录权限的设置
  • c/c++面试题(5)(c++重要的概念详解)
  • 执行计划基础 动态采样
  • 浅谈UML的概念和模型之UML九种图
  • iOS开发百问(4)
  • 使用mysqldump导入导出MySQL数据库
  • perl:warning:Setting locale failed解决办法
  • tomcat启用远程调试
  • 源码安装nginx及简单应用
  • C++的异常处理之二:C++11的异常处理
  • wamp环境如何使用ip访问站点
  • [译]如何构建服务器端web组件,为何要构建?
  • 〔开发系列〕一次关于小程序开发的深度总结
  • angular学习第一篇-----环境搭建
  • PHP面试之三:MySQL数据库
  • Selenium实战教程系列(二)---元素定位
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 大主子表关联的性能优化方法
  • 简单实现一个textarea自适应高度
  • 近期前端发展计划
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 学习Vue.js的五个小例子
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 湖北分布式智能数据采集方法有哪些?
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (六)激光线扫描-三维重建
  • (转) Android中ViewStub组件使用
  • (转)jdk与jre的区别
  • (转)Sublime Text3配置Lua运行环境
  • (转)visual stdio 书签功能介绍
  • (转)原始图像数据和PDF中的图像数据
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 常见的偏门问题
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /*在DataTable中更新、删除数据*/
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Autowired标签与 @Resource标签 的区别