« 未成年人勿进,你们无法理解的,真的!(谨以献给1980~1989出生的人)« »解决Ext.form.ComboBox提交始终获得displayField的值 »
解决EXT中Grid等组件读取Json数据的Date数据问题

java里面时间类型转换成json数据就成这样啦:  "modifyTime":{"date":30, "day":3, "hours":15, "minutes":14, "month":3, "nanos":0, "seconds":38, "time":1209539678000, "timezoneOffset":-480, "year":108}
在gridpanel里面就会显示成[object,object],同样在表单中也显示[object,object].

从开始使用EXt以来,就被这个问题困扰,一直没解决这个问题,查了网上的解决办法,都没成功,而且,网上的办法也不简单.

今天实在受不了啦,就动手自己做了一下,没想到,很轻松的搞定了这个问题.(原创文章,转载请注明来源http://www.busfly.cn/post/ext-grid-json-date.html)

解决办法如下:

写一个render方法,转化成正确的Date数据就可以了.如下:

function renderDate(format) {
    return function(v) {
        var JsonDateValue;
        if (Ext.isEmpty(v))
            return '';
        else if (Ext.isEmpty(v.time))
            JsonDateValue = new Date(v);
        else
            JsonDateValue = new Date(v.time);
        return JsonDateValue.format(format || 'Y-m-d H:i:s');
    };
};

在ColumnModel里面这样写

{
        header    : "birthday",
        renderer  : renderDate('Y-m-d'),
        dataIndex : 'birthday',
        align     : 'center'
}

OK,搞定了,这样就可以正常显示Date类型的数据了.

在Form表单等其它地方的数据也是一样,写个方法转化一下就可以了.但是,DateField没有renderer 这样的东西设置,那咋办?

那就只好对DateField重写一下喽,代码如下

Ext.override(Ext.form.DateField, {
    setValue : function(date) {
        if (Ext.isEmpty(date)) {
        }
        else if (Ext.isEmpty(date.time)) {
            date = new Date(date);
        }
        else {
            date = new Date(date.time);
        }
        Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
    }
});

=======================================================================================

目前整理一下,最后定稿如下:

/**
 * 将Json中Date长串,转成Js中的时间串
 * @param {} value
 * @return {}
 */
function readJsonDate(JsonDateValue, format) {
    var o;
    if (Ext.isEmpty(JsonDateValue))
        return '';
    else if (Ext.isEmpty(JsonDateValue.time))
        o = new Date(JsonDateValue);
    else
        o = new Date(JsonDateValue.time);
    return o.format(format || 'Y-m-d H:i:s');
};
/**
 * 主要用在Grid中
 * @param {} format
 * @return {}
 */
function renderDate(format) {
    return function(v) {
        return readJsonDate(v, format);
    };
};

在ColumnModel里面这样写
{
        header    : "birthday",
        renderer  : renderDate('Y-m-d'),
        dataIndex : 'birthday',
        align     : 'center'
}

//DateField重写

Ext.override(Ext.form.DateField, {
    setValue : function(date) {
        if (Ext.isEmpty(date)) {
        }
        else if (Ext.isEmpty(date.time)) {
            date = new Date(date);
        }
        else {
            date = new Date(date.time);
        }
        Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
    }
});

 

 


Tags: ext  EXT2  javascript  原创   |

原创文章如转载,请注明:转载自:巴士飞扬-技术BLOG : http://www.busfly.net/

本文链接地址:http://www.busfly.net/post/ext-grid-json-date.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:
  • 引用此留言  1.neeke  http://www.ineeke.cn
  • 我怎么没有遇到过这种问题呢,Date可以再Grid里面显示的啊。
    巴士飞扬 于 2009-6-16 13:49:25 回复
    你是使用的Java吗,转Json你用的是哪个组件 ,我用的是Json-lib,如果你不是这种环境下,可能不会出现这些问题.
    neeke 于 2009-6-26 0:02:26 回复
    嗯,也用的是JAVA JSON-LIB,现在公司用的是ColdFusion。
  • [删除]2009-6-16 9:53:45 回复该留言




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网站分类
分类最近文章
最近发表
最新评论及回复
最近留言
热文排行
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(J2EE为主):3769186.