2017-06-24 7 views
0

グリッドがあります。新しい行スクリプトを追加すると自動的に "Y-m-d"という形式で日付が自動的に挿入され、正常に動作します。Ext JSはサーバーの日付に自動的に "2017-06-24"( "Y-m-d")形式で送信します。しかし、この日付を更新すると、Ext JSはサーバの日付に2017-06-24T00:00:00の形式で送信します。 何が間違っていますか? 更新後、「2017-06-24」の日付(「Y-m-d」)に送信してください。フォーマットをY-m-dの形式で送信する方法Ext JS 6

Ext.require(['Ext.data.*', 'Ext.grid.*']); 


    // Создаем model 
    Ext.define('Users', { 
     extend: 'Ext.data.Model', 
     //idProperty: 'id', 
     fields: [{ 
       name: 'id', 
       type: 'int' 
      } 
     ] 
    }); 

    Ext.onReady(function() { 
     // Создаем store 
     var store = Ext.create('Ext.data.Store', { 
       autoLoad: true, 
       autoSync: true, 
       model: 'Users', 
       proxy: { 
        type: 'ajax', 
        url: 'server.php', 
        api: { 
         create: 'server.php?action=create', 
         read: 'server.php?action=read', 
         update: 'server.php?action=update', 
         destroy: 'server.php?action=delete' 
        }, 
        reader: { 
         type: 'json', 
         rootProperty: 'data' 
        }, 
        writer: { 
         type: 'json', 
         encode: true, 
         rootProperty: 'dataUpdate', 
         allowSingle: false, 
         writeAllFields: true, 
         //root:'records' 
        }, 
        actionMethods: { 
         create: 'GET', 
         read: 'GET', 
         update: 'GET', 
         destroy: 'GET' 

        } 
       }, 
       listeners: { 
        write: function(store, operation) { 
         var record = operation.getRecords()[0], 
          name = Ext.String.capitalize(operation.action), 
          verb; 


         if (name == 'Destroy') { 
          verb = 'Destroyed'; 
         } else { 
          verb = name + 'd'; 
         } 
         //Ext.example.msg(name, Ext.String.format("{0} user: {1}", verb, record.getId())); 

        } 
       } 
      } 


     ); 

     var grid = Ext.create('Ext.grid.Panel', { 
      renderTo: document.body, 
      //plugins: [rowEditing], 
      // Редактирование 
      plugins: { 
       ptype: 'cellediting', 
       clicksToEdit: 1 
      }, 
      listeners: { 
       edit: function() { 

       } 
      }, 
      width: 1000, 
      height: 330, 
      frame: true, 
      title: 'Users', 
      store: store, 
      iconCls: 'icon-user', 
      columns: [{ 
        text: 'id', 
        width: 50, 
        sortable: true, 
        dataIndex: 'id', 
        renderer: function(v, meta, rec) { 
         return rec.phantom ? '' : v; 
        } 
       }, 
       { 
        header: 'Дата', 
        width: 70, 
        // sortable: true, 
        dataIndex: 'date', 
        renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
        editor: { 
         completeOnEnter: false, 
         field: { 
          xtype: 'datefield', 
          dateFormat: 'd/m/Y', 
          allowBlank: false 
         } 
        } 
       }, 
       { 
        header: 'Время начала', 
        width: 120, 
        // sortable: true, 
        dataIndex: 'time_start', 
        //format: 'H:i', 
        // Нужно для верного отображеия времени после редактирования в таблице 
        renderer: Ext.util.Format.dateRenderer('H:i'), 
        editor: { 
         completeOnEnter: false, 
         field: { 
          xtype: 'timefield', 
          format: 'H:i', 
          //name: 'timeStart1', 
          //fieldLabel: 'Time In', 
          minValue: '8:00', 
          maxValue: '20:00', 
          increment: 30, 
          anchor: '100%', 
          allowBlank: false 
         } 
        } 
       } 

      ], 
      dockedItems: [{ 
       xtype: 'toolbar', 
       items: [{ 
        text: 'Add', 
        iconCls: 'icon-add', 
        handler: function() { 
         // Создаем новую задачу 
         // Для корректной работы с БД нужно задать ID новой строки, равной +1 от последней ID из таблицы. 
         var rec = new Users(); 
         //console.log (x);("rec data= " + rec.id + " -- " + rec.data.id); 
         var idArr = grid.store.data.items; 
         var idValue = []; 
         for (var i = 0; i < idArr.length; i++) { 
          idValue.push(idArr[i].id); 
         } 
         idValue.sort(function(a, b) { 
          return a - b; 
         }); 
         var maxId = idValue[idValue.length - 1]; 
         console.log(maxId); 
         rec.id = maxId + 1; 
         rec.data.id = maxId + 1; 

         rec.date = Ext.Date.format(new Date(), 'Y-m-d'); 
         rec.data.date = Ext.Date.format(new Date(), 'Y-m-d'); 

         rec.time_start = Ext.Date.format(new Date(), '2008-01-01\\TH:i:s'); 
         rec.data.time_start = Ext.Date.format(new Date(), '2008-01-01\\TH:i:s'); 
         store.insert(0, rec); 
         //store.add(rac); 
         //grid.getView().refresh(); 
         // rowEditing.startEdit(rec, 0); 
        } 
       }, '-', { 
        itemId: 'delete', 
        text: 'Delete', 
        iconCls: 'icon-delete', 
        disabled: false, 
        handler: function() { 
         var selection = grid.getView().getSelectionModel().getSelection()[0]; 
         if (confirm('Вы действительно хотите удалить задачу №' + selection.id + " ?")) { 
          // Удлаяем  
          if (selection) { 
           store.remove(selection); 
          } 
         } 
        } 
       }] 
      }] 
     }); 
    }); 

答えて

0

datefield XTYPEは、サーバーに提出する日付書式文字列を指定することができsubmitFormat設定されています。

https://docs.sencha.com/extjs/6.2.0/classic/Ext.form.field.Date.html#cfg-submitFormat

更新:Selmarilコメントで述べたように、これはあなたが日付フィールドを定義するセクションに入ります。

   { 
        header: 'Дата', 
        width: 70, 
        // sortable: true, 
        dataIndex: 'date', 
        renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
        editor: { 
         completeOnEnter: false, 
         field: { 
          xtype: 'datefield', 
          dateFormat: 'd/m/Y', 
          submitFormat: 'd/m/Y' 
          allowBlank: false         
         } 
        } 
       } 
+0

私の場合、 'submitFormat'の使い方を教えてください。 – Masquitos

+1

私はケビンがこの意味を考える: エディタ:{ completeOnEnter:偽、 フィールド:{ XTYPE: '日付フィールド'、 DATEFORMAT: 'D/M/Y'、 submitFormat: 'D/M/Y'、 をallowBlank:false } } – Selmaril

0

ここではモデルで作業しています。そのモデルでは、fieldsの設定があり、どのフィールドにどのデータypeが含まれているかを定義することができます。日付の場合は、どの形式でサーバーに送信する必要があります。

fields:[{ 
    name: 'id', 
    type: 'int' 
},{ 
    name: 'date', 
    type:'date', 
    dateFormat:'Y-m-d' 
}] 

はさらに、私はあなたのコード内で他のいくつかの赤い旗を参照してください。

  • がレコードの日付を設定するrecord.date =またはrecord.data.date =を使用しないでください。
  • 絶対に必要な場合を除き、Date.format()を使用して日付をフォーマットしないでください。内部的には、文字列ではなく、javascriptの日付で常に作業する必要があります。適切な形式(例:format:'d/m/Y')でグリッドにxtype:'gridcolumn'を表示してください。

したがって、たとえば、プログラムで既存のレコードを更新するか、店の外に新しいグリッドの行または新しいレコードを作成するときに、record.set('date', new Date());又はstore.add({date:new Date()})又はExt.create('Users',{date: new Date()})を使用します。

0

私のモデルではdateWriteFormat: "Y-m-d"を使用しており、私の古典的な日付を私のpostgresバックエンドに送信するために完全に動作します。

関連する問題