【问题标题】:Extjs retrieving and writing timestampsExtjs 检索和写入时间戳
【发布时间】:2011-12-22 13:23:26
【问题描述】:

所以我有这个由用户网格组成的小型 Extjs 应用程序。每个用户都有一个字段,我从服务器发送他订阅的日期作为时间戳值(unix)。

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 }
    ]
});

网格有一个渲染器,因此我可以将该时间戳渲染为人类可读的格式,例如29-Oct-2011 04:00 am

...
{
    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 中将日期保存在作为时间戳检索的字段上?

【问题讨论】:

    标签: javascript extjs


    【解决方案1】:

    我最近用网格面板做了这个。

    即使数据作为时间戳从数据库返回,使用 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: 配置选项,因为我在其中使用了grideditor 扩展来允许在网格本身上在线编辑数据 - 如果您以单独的形式编辑值,则不需要这个。)

    // 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')
    

    【讨论】:

      【解决方案2】:

      在您的数据字段中尝试这样的操作:

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

      并将格式更改为 'd-M-Y h:i a'

      【讨论】:

      • 表单输入按照这种格式显示,但是发送到服务器的请求载荷仍然是"date_added":"NaN-NaN-NaNTNaN:NaN:NaN"
      • 我猜请求有效负载是 extjs 认为的从 unix 到日期的转换,但我发送的实际上是日期字符串而不是 unix 时间戳。
      • 将模型中的“dateFormat”更改为“d-M-Y h:i a”。告诉它是否有帮助。
      • 使用此 dateFormat,作者发送了一个半有效的日期 (2011-12-26T00:00:00),但由于我从服务器接收时间戳,阅读器停止显示日期。
      • 所以在您的表单中从服务器接收日期(如果需要,请转换...)
      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多