1

カスタム レンダラーを Bryntum Ext ガント チャートに追加しようとしています。

ローカル タイムゾーンで表示されている日付がありますが、UTC 日付で表示したいと考えています。これは、ソース アプリケーションでデータソースがユーザーに日付を表​​示するために使用しているためです (ブラウザーのタイムゾーンに依存しません)。

ここの投稿は正しい方向に私を導きました (私のテストに基づいて必要なもののようです):日付をフォーマットするときに ExtJS が日を減算するのはなぜですか?

リンクされたソリューションをカスタム レンダラーに実装するにはどうすればよいですか?


私はこれを試しましたが、列は空白でした:

{
    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'
            },
4

1 に答える 1

2

この関数の使用を修正しました:

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を解析するとき、タイムスタンプに次のスイッチ関数を使用します。

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

これにより、「日付」オブジェクトがext.jsに確実にフィードされ、レンダラーを使用してソースの日付形式と一致するように列がレンダリングされます。

于 2012-12-14T07:32:35.463 に答える