`
kidiaoer
  • 浏览: 822001 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

在Ext中EditorGrid中datefield输入问题解决过程

阅读更多
在Ext中EditorGrid中datefield输入问题解决过程

近日自己做了一个小项目,要用Ext做界面,以前没用过ext,对JavaScript也是一知半解,就边学边做,这是我在这个过程中遇到一个问题的解决过程,欢迎大家批评指正。

一、问题开始
在可编辑表格中有一个日期域,我希望能通过Ext中的日期输入域输入指定格式的日期,以便提交给服务器后方便处理。然而却出现了一些问题。

在这个生产日期列我设置的column model 为
{header:'生产日期',dataIndex:'p_date',editor:new Ext.form.DateField({format:'Y-m-d'})}
然而在这个dateField在输入后日期格式却不正确
输入时:


输入后格式却变了:

二、解决了?
后来我Google了一下,看到有人说datefield定义时应该设置renderer函数,
应该把column model改成这样:
{header:'生产日期',dataIndex:'p_date',renderer:Ext.util.Format.dateRenderer('Y-m-d'),editor:new Ext.form.DateField({format:'Y-m-d'})}
我猜测EditorGridPanel在实现可编辑功能的方法应该是,在单元格中插入一个输入框,用户输入后再获取这个输入框中的值,然后调用renderer函数,再把返回值插入到单元格中。

三、不对

此时界面上的问题解决了,可是在服务器上接收到的日期依然是刚开始的那种英文格式,问题还是没有解决。
我就去查看了我写的在EditorGridPanel 的事件响应函数获取日期的代码:
grid.on('afteredit',function(event){
    var date = event.value;
    .....
}
我意识到这个event.value的值应该是date类型的,在发送到服务器上之前应该转化成正确的字符串格式,
于是我把代码改成下面这样:
grid.on('afteredit',function(event){
    var date = event.value.format("Y-m-d");
    .....
}

四、还是不对

此时服务器上接收到的日期正确了,但是从服务器接收到的日期还是不正确:


不用说,这肯定是renderer函数的返回值了,
从服务器接收来的是字符串,调用renderer函数自然不能获得正确的值了。

五、搞定

在这里我要重新编写一个renderer函数,传入字符串格式的date和Date类型时都能返回正确的值
function dateRender(value){
  if(typeof value == "string"){
   return value;
  }
  return value.format("Y-m-d");
}
column model改成
{header:'生产日期',dataIndex:'p_date',renderer:dateRender,editor:new Ext.form.DateField({format:'Y-m-d'})}

六、都对了
需要格式转换的地方很多,我们再回想一下,发现无非就是Date 和String之间的转换,应该是通过toString方法进行转换的。
由此前面难看的英文日期格式应该就是Date的toString方法返回的值了,
一不做二不休,我们把Date的toString方法改一下:
Date.prototype.toString=function(){
  return this.format("Y-m-d");
};
这样前面的工作都白做了,
表格的事件响应函数恢复原样:
grid.on('afteredit',function(event){
    var date = event.value;
    .....
}
前面写的dateRender函数也不需要了,
column model 定义成:
{header:'生产日期',dataIndex:'p_date',editor:new Ext.form.DateField({format:'Y-m-d'})}
甚至:
{header:'生产日期',dataIndex:'p_date',editor:new Ext.form.DateField()} 也可以。
分享到:
评论

相关推荐

    Ext中xtype和vtype.

    在 Ext 中,xtype 和 vtype 是两个非常重要的概念,它们分别用于定义组件的类型和验证规则。 xtype 是 Ext 中的一种组件类型,它定义了组件的行为和外观。Ext 提供了许多内置的 xtype,例如 button、textfield、...

    Ext组件描述,各个组件含义

    **2.19 Date Field (Ext.form.DateField)** - **xtype**: `datefield` - **功能描述**:Date Field 是一个用于输入日期的文本框。 - **主要用途**:适用于需要用户输入日期的场景。 **2.20 Field (Ext.form.Field)...

    精通JS脚本之ExtJS框架.part1.rar

    7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor 7.3 ExtJS表单组件的综合应用 第8章 设计表格类布局 8.1 表格简介 8.1.1 表格的基本属性 8.1.2 制作第一个表格 8.2 表格常用功能...

    ExtJS3总结内容

    `vtype`在ExtJS中主要用于表单验证,它定义了一组预设的验证规则,如`email`, `url`, `date`等,用于确保表单输入符合预期的格式。例如,要验证一个字段是否为有效的电子邮件地址,可以在`vtype`属性中设置为`email`...

    精通JS脚本之ExtJS框架.part2.rar

    7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor 7.3 ExtJS表单组件的综合应用 第8章 设计表格类布局 8.1 表格简介 8.1.1 表格的基本属性 8.1.2 制作第一个表格 8.2 表格常用功能...

    ExtJs xtype一览

    - **`datefield` (Ext.form.DateField)**: 日期选择项组件,用于输入日期值。 - **`timefield` (Ext.form.TimeField)**: 时间录入项组件,用于输入时间值。 - **`field` (Ext.form.Field)**: 表单字段组件,是所有...

    ExtJs组件类的对应表

    11. **`editorgrid`** - `Ext.grid.EditorGridPanel`,可编辑的表格组件,允许用户直接在表格中编辑数据。 12. **`propertygrid`** - `Ext.grid.PropertyGrid`,属性表格组件,用于展示对象的属性。 13. **`...

    extJs xtype 类型

    11. **`editorgrid`:** 可编辑的表格组件,允许用户直接在表格中编辑数据,通过`Ext.grid.EditorGridPanel`类实现。 12. **`propertygrid`:** 属性表格组件,用于展示对象的属性列表,通过`Ext.grid.PropertyGrid`...

    Extjs xtype集合

    在Extjs开发过程中,`xtype`(扩展类型)是极为重要的一个概念。它实际上是一种类型标识符,用于快速创建特定类型的组件实例。通过使用预定义的`xtype`值,开发者可以方便地构建出各种复杂的用户界面而无需编写大量...

    ExtJS的xtype列表

    - `editor`: 在表格或其他组件中嵌入的编辑器,用于输入或编辑数据。 - `dataview`: 用于展示非表格形式的数据,如列表或图片轮播。 - `listview`: 类似于`dataview`,但更专注于列表展示。 2. **容器及数据类...

    学习ExtJS Panel常用方法

    ### ExtJS Panel 常用方法详解 #### 一、属性介绍 在开始探讨 ExtJS Panel 的常用方法之前,我们先来...需要注意的是,在实际开发过程中,还需要根据项目需求选择合适的 xtype 和方法组合,以实现最佳的用户体验。

Global site tag (gtag.js) - Google Analytics