【问题标题】:Custom Renderer in Ext-js - Bryntum/ExtJs UTC Date IssueExt-js 中的自定义渲染器 - Bryntum/ExtJs UTC 日期问题
【发布时间】:2012-12-14 02:34:11
【问题描述】:

我正在尝试将 自定义渲染器 添加到 Bryntum Ext 甘特图。

我有在本地时区显示的日期,但我希望在 UTC 日期中显示它们,因为这是数据源用来向用户显示日期的内容(它与浏览器时区无关)源应用程序。

这里的帖子引导我朝着正确的方向前进(根据我的测试,这似乎是我所需要的):Why does ExtJS subtract a day when formatting a date?

如何在自定义渲染器中实现链接解决方案


我试过了,但该列是空白的:

{
    xtype:'startdatecolumn',
    sortable: false,
    text: 'Start',
    dataIndex: 'StartDate',
    renderer: function (v, m, r) {
        return Ext.util.Format.date(Ext.Date.parse(v, "Y-m-d"), "m-d-Y");
    }
}

也试过了,该列是空白的:

{
    xtype:'startdatecolumn',
    sortable: false,
    text: 'Start',
    dataIndex: 'StartDate',
    renderer: function (v) {
        var dt = Ext.Date.parse(v, "Y-m-d");
        Ext.util.Format.date(dt, "m-d-Y");
        return dt;
    }
}

使用这种格式,它以本地时区显示日期(不正确,除非设置为 UTC)。

{   
    xtype:'enddatecolumn',
    dataIndex: 'EndDate',
    sortable: false,
    text: 'End'
}

Bryntum 色谱柱示例

 columns : [
            {
                xtype : 'treecolumn',
                header: 'Tasks',
                sortable: true,
                dataIndex: 'Name',
                width: 200,
                field: {
                    allowBlank: false
                },
                renderer : function(v, meta, r) {
                    if (!r.data.leaf) meta.tdCls = 'sch-gantt-parent-cell';

                    return v;
                }
            },
            {
                xtype : 'startdatecolumn'
            },
            {
                //hidden : true,
                xtype : 'enddatecolumn'
            },

【问题讨论】:

  • 您是否使用console.log() 块来观察渲染器处理程序看到的数据是什么?例如,console.log(v); 将是一个开始。或者我想在控制台 Javascript 选项卡中使用断点。
  • 是的,我确实使用了 console.log(),但绝对可以花一些时间更好地学习 firebug / chrome 控制台。除了反复试验,还有什么推荐的资源吗?
  • 由于 ExtJS 是您在这里的特殊情况,我将遵从 Sencha's support docs,它确实提供了一些很好的提示,并且似乎是 Firebug 的忠实粉丝(就像我一样,因为它是在测试版中出现的) .有关 Firebug 的截屏视频和教程列表,请参阅文章底部。话虽如此,Chrome Console 还是很不错的,有些人也很喜欢 Venkman 和 Fiddler。 IE“开发人员工具”是浪费时间 IMO。
  • 谢谢你;我一定跳过了那部分:)

标签: javascript date extjs utc renderer


【解决方案1】:

使用此功能修复:

function niceDate (v, m, r) {
            var dt =    padStr(1 + v.getMonth()) + 
                        '-' +
                        padStr(v.getDate()) +
                        '-' +
                        padStr(v.getFullYear());
            return dt;
           }

function padStr(i) {
    return (i < 10) ? "0" + i : "" + i;
}

在列渲染器中:

                   {
                    xtype:'startdatecolumn',
                    sortable: false,
                    text: 'Start',
                    dataIndex: 'StartDate',
                    renderer: niceDate
                    }

在解析 xml 时,我使用带有以下时间戳的 switch 函数:

case 'timestamp':
    if(!empty(v))
    v = new Date(parseInt(v));
    break;

这似乎可靠地将“日期”对象提供给 ext.js,并使用渲染器渲染列以匹配我们的源日期格式。

【讨论】:

  • 感谢您的工作!您是否允许编辑开始/停止日期?我在 DatePicker 上看到了类似的问题:编辑器呈现日期 - 1(StartDate 为 UTC,应用了浏览器的时区)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多