zoukankan      html  css  js  c++  java
  • Extjs日期格式问题

    一般我们的前台代码Ext.grid.ColumnModel里会这样写,以便显示日期格式:

    Js代码
    1.....  
    2.{header:"birthday",dataIndex:"birthday".......renderer:new Ext.util.Format.dateRenderer("Y-m-d"),  
    3..... 
    ....
    {header:"birthday",dataIndex:"birthday".......renderer:new Ext.util.Format.dateRenderer("Y-m-d"),
    ....
    如果你前台这样写的话,那恭喜你,你的显示日期那列将不再正确显示时间,而是显示为"NaN-NaN-NaN",是吧?呵呵,问我怎么知道的?因为最开始我也是这么错的。 为什么会是错的呢?让我们来看看Ext.format.dateRenderer的源代码(开源的东西就是好),它的源代码是这样的:

    Js代码
    1.dateRenderer : function(format) {  
    2.    return function(v) {  
    3.        return Ext.util.Format.date(v, format);、  
    4.    }  
    5.} 
    dateRenderer : function(format) {
    return function(v) {
    return Ext.util.Format.date(v, format);、
    }
    } 可以看出,我们传会来的值,被当做日期又被格式化了一次,我们传回来的是日期吗?以前是,经过昨天后台代码的修改,我们传回来的仅仅是个字符串了,至于为什么要这么改,请看昨天写的“Extjs日期格式问题(一) ”,那咋办?有的朋友应该已经想到了,既然是字符串,那就直接显示呗,不用renderer了,于是前台代码Ext.grid.ColumnModel里就变成了:

    Js代码
    1.....  
    2.{header:"birthday",dataIndex:"birthday".......),  
    3..... 
    ....
    {header:"birthday",dataIndex:"birthday".......),
    ....可以负责任的告诉你,这样写,绝对可以正确显示了,这样是不是感觉更简单了呢?



    但是,基于我项目里的要求,这个问题并没有解决完,因为在这里不是一个简单的gridpanel,而是一个editgridpanel,所以还得定义一个editor,于是有了下面这样一段代码:

    Js代码
    1.....  
    2.{header:"birthday",dataIndex:"birthday".......,  
    3.      editor:new Ext.grid.GridEditor(new Ext.form.DateField({format:"Y-m-d"})),  
    4..... 
    ....
    {header:"birthday",dataIndex:"birthday".......,
          editor:new Ext.grid.GridEditor(new Ext.form.DateField({format:"Y-m-d"})),
    ....加了这个DateField控件后,每次可以正常的选择日期,但是选择完日期后,grid里显示的格式就又不正确了,这次显示的内容成了: "Wed Mar 04 1970......",这样的格式一看就是个日期,这样显示的原因当然是因为我们没有写renderer进行格式化处理的缘故。。。

    说到这里,有人应该已经想到解决办法了,另外有些人可能就抓狂了,这renderer加了不能正常显示,不加也不能正常显示,这很矛盾啊。。

    问题往往到了最矛盾的时候,也是到了解决的时候,现在我把解决代码贴出来,大家一看就明白了。多的不说,看代码:

    Js代码
    1.renderer:function(value){  
    2.    if(value instanceof Date){  
    3.        return new Date(value).format("Y-m-d");  
    4.    }else{  
    5.        return value;  
    6.    }  
    7.} 
    renderer:function(value){
    if(value instanceof Date){
    return new Date(value).format("Y-m-d");
    }else{
    return value;
    }
    } 简单吧?自己写renderer就是了。。



  • 相关阅读:
    ASP.NET的内置对象 —— Response 对象
    dd命令测试硬盘IO
    Linux netstat命令详解
    tpcc-mysql安装、使用、结果解读
    【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo(转)
    mysql5.6主从
    无法远程访问Mysql
    pythonMD5加密
    python随机验证码函数
    log buffer space事件(转)
  • 原文地址:https://www.cnblogs.com/soundcode/p/2186687.html
Copyright © 2011-2022 走看看