博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExtJs中处理时间,出现NaN-NaN-NaN的解决方式
阅读量:6610 次
发布时间:2019-06-24

本文共 1964 字,大约阅读时间需要 6 分钟。

关键字: 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就是了。。

转载于:https://www.cnblogs.com/magicyk/p/4443431.html

你可能感兴趣的文章
iphone-common-codes-ccteam源代码 CCPlayer.h
查看>>
HTML头部
查看>>
如何去掉dede列表推荐时标题被加粗
查看>>
bzoj 1304: [CQOI2009]叶子的染色
查看>>
小程序引入多个e-charts
查看>>
Node.js实现热加载
查看>>
PLSQL_Oracle基本概念总结(汇总)
查看>>
分布式icinga2安装与使用
查看>>
【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
查看>>
video设置视频的宽高
查看>>
C#学习九之WPF应用使用SQLite数据库详解
查看>>
【原创】Mindjet Manager思维导图软件云服务功能的使用方法
查看>>
MVC 防止 CSRF 的方法
查看>>
不使用xib创建iphone window
查看>>
sqlserver 连接查询的问题,a表无重复记录,与b表中的记录为1对N关系,如何在查得a表信息时统计b表记录数...
查看>>
2018.5.7每天一题面试题----面向对象的特征
查看>>
Jquery 弹出框出插件 仿IOS效果
查看>>
paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。...
查看>>
第八条:覆盖equals时请遵守通用约定
查看>>
flask_sqlalchemy的使用
查看>>