2011-12-22 7 views
2

私はこの小さなExtjsアプリケーションをグリッドで構成しています。各ユーザーには、彼がタイムスタンプ値(unix)として購読した日付をサーバーから送信するフィールドがあります。私は、このような29-Oct-2011 04:00 amなど人間が読める形式にそのタイムスタンプをレンダリングすることができるようにExtjsタイムスタンプの取得と書き込み

Ext.define('AP.model.User', { 
     extend: 'Ext.data.Model', 
     fields: [ 
     { name: 'id', type: 'int', persist : false }, 
     { name: 'date_added', type: 'date', dateFormat: 'timestamp'}, 
     { name: 'username', type: 'string', persist : false } 
    ] 
}); 

グリッドはレンダラがあります

... 
{ 
    header: 'Date added', 
    align: 'center', 
    sortable: true, 
    dataIndex: 'date_added', 
    width: 140, 
    fixed: true, 
    renderer: Ext.util.Format.dateRenderer('d-M-Y h:i a') 
} 
... 

意図したとおりにすべての作品、値が正しく表示されますが、私も部分的に各レコードを編集するためのフォームがあります。私の形式では、私は日付を選択できるフィールドxtype: 'datefield'を提供することによって、日付追加フィールドを編集することができます。私の記録のために新しい日付を選んだときは、11/29/2011(上記の私の日付より)が表示されますが、そのフォームを送信してレコードを更新すると、リクエストペイロードには次のような内容が投稿されます:{"date_added": "NaN-NaN-NaNTNaN:NaN:NaN"}

タイムスタンプとして取得されたフィールドのExtjsに日付を保存するにはどうすればいいですか?

答えて

0

は、あなたのデータフィールドに次のようにしてみてください:

{xtype: 'datefield', 
    anchor: '100%', 
    fieldLabel: 'Date', 
    name: 'date', 
    format: 'm d Y'} 

とに書式を変更する 'D-M-YのH:I'

+0

フォーム入力がこのフォーマットに従って表示されますが、サーバーに送信された要求ペイロードはまだ '「DATE_ADDED」である:「ナンナンNaNTNaN:NaNの:NaNの」' –

+0

私は要求ペイロードを推測しているですどのextjsがUNIXから日付への変換であるかを示していますが、私が送るのは実際には日付文字列であり、UNIXのタイムスタンプではありません。 –

+0

モデルの「dateFormat」を「d-M-Y h:i a」に変更します。 役立つかどうかを教えてください。 – Hadas

2

私は最近gridpanelでこれをやりました。 type: dateを使用して、タイムスタンプなどのデータベースからのデータを返しますが、私のためにうまく働いていても

...

// DATA MODEL 
Ext.define('Particle', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'particle_id', type: 'long' }, 
     { name: 'name', type: 'string' }, 
     { name: 'type', type: 'string' }, 
     { name: 'start_date', type: 'date' }, 
     { name: 'sched_date', type: 'date' }, 
     { name: 'sched_time', type: 'date' }, 
     { name: 'notes', type: 'string' } 
    ] 
}); 

私は次のように列モデルに日付値をレンダリングし、renderer:設定オプションに注意してください。 (私はfield:設定オプションを使用しています。なぜならグリッドエディターの拡張機能を使ってグリッド上でデータをインラインで編集できるからです。別の値で編集する場合は不要です)

// GRID COLUMN MODEL 
    var columns = [ 
     {text: "Name", flex: 1, sortable: true, dataIndex: 'name', renderer: function(data,meta,record){meta.attr = 'ext:qtitle="Notes:"ext:qtip="' + record.get('notes') + '"'; return data;}}, 
     {text: "Type", width: 55, sortable: true, dataIndex: 'case_lvl'}, 
     {text: "RF Started", width: 80, sortable: true, dataIndex: 'start_date', renderer: Ext.util.Format.dateRenderer('j-M-Y')}, 
     {text: "Sched Date", width: 80, sortable: true, dataIndex: 'sched_date', field: 'datefield', renderer: Ext.util.Format.dateRenderer('j-M-Y')}, 
     {text: "Sched Time", width: 80, sortable: true, dataIndex: 'sched_time', field: 'timefield', renderer: Ext.util.Format.dateRenderer('g:i A')} 
    ]; 

は、あなたの質問、具体的に答えるために、私は()Ext.Date.formatを使用して、フィールドの外にそれを選ぶことにより、タイムスタンプ文字列としてデータベースに日付値が返されました。フォームを送信する前にこれを追加することができます。

schedDate = Ext.Date.format(Ext.getCmp('schedDate').getValue(),'Y-m-d') + Ext.Date.format(Ext.getCmp('schedTime').getValue(),' H:i:s') 
関連する問題