2016-02-26 2 views
0

Когда я добавляю редактор с полем даты как Xtype в свою сетку, поле даты не отображает.Исходное поле редактора EXTJS не отображается после добавления в сетку

Моя проблема заключается в том, что я должен проверить достоверность данных на основе двух дат. Когда я нажимаю в одном из dafields, проверьте значение другого выбора, но я не могу получить значение другого поля даты, потому что он не отображается (поле даты отображает после нажатия на него).

Кроме того, если валидатор сработал с неопределенным, поле даты разозлится, и позиция на DOM изменяется случайным образом.

Код что-то вроде этого:

{ xtype: 'form', 
defaults: { 
    labelAlign: 'top', 
    width: '95%' 
}, 
items: [ 
    Ext.create('Ext.grid.Panel', { 
      id: '<the id>', 
      selModel: Ext.create('Ext.selection.CheckboxModel', { 
       singleSelect: false, 
       sortable: false, 
       checkOnly: true 
      }), 
      store: myStore, 
      plugins: { 
       ptype: 'celledititing', 
       pluginId: 'celledit', 
      }, 
      columns: [ 
       { text: 'Field 1', dataIndex: 'FIELD_1', width: '25%' }, 
       { text: 'Field 2', dataIndex: 'FIELD_2', width: '25%' }, 
       { text: 'Date 1', dataIndex: 'DATE_1', width: '25%', 
       renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
       editor: { 
        xtype: 'datefield', 
        id: '<date id>', 
        vtype: 'daterange', 
        endDateField: '<date 2 id>', 
        dateRangeMin: '', 
        flex: 1 
       }, 
       { text: 'Date 2', dataIndex: 'DATE_2', width: '25%', 
       renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
       editor: { 
        xtype: 'datefield', 
        id: '<date 2 id>', 
        vtype: 'daterange', 
        startDateField: '<date id>', 
        dateRangeMin: '', 
        flex: 1 
       } 
      ], 
      plugins: { 
       ptype: 'cellediting', 
       clicksToEdit: 1 
      }, 
      height: 200 
     }) 
     ] 
} 

Greetings-

ответ

0

Вы правы. вы не можете получить значение из другого поля даты, потому что оно не отображается, вы можете сохранить поле в свойстве сетки и проверить его вручную на событии сетки validateedit. здесь почти готова сниппет, вам просто нужно добавить VALIDATE логику validateedit слушателя GRID в

var myStore = Ext.create('Ext.data.Store', { 
 

 
    data: [{ 
 
     FIELD_1: 'voluptas', 
 
     FIELD_2: 'consequatur', 
 
     DATE_1: '12/15/2013', 
 
     DATE_2: '4/18/2008' 
 
    }, { 
 
     FIELD_1: 'eveniet', 
 
     FIELD_2: 'modi', 
 
     DATE_1: '4/7/2008', 
 
     DATE_2: '7/26/2004' 
 
    }, { 
 
     FIELD_1: 'ea', 
 
     FIELD_2: 'voluptas', 
 
     DATE_1: '7/3/2012', 
 
     DATE_2: '9/2/2008' 
 
    }, { 
 
     FIELD_1: 'minima', 
 
     FIELD_2: 'iste', 
 
     DATE_1: '3/3/2002', 
 
     DATE_2: '7/15/2013' 
 
    }, { 
 
     FIELD_1: 'consequatur', 
 
     FIELD_2: 'beatae', 
 
     DATE_1: '3/3/2013', 
 
     DATE_2: '10/20/2014' 
 
    }], 
 
    fields: [{ 
 
     name: 'FIELD_1' 
 
    }, { 
 
     name: 'FIELD_2' 
 
    }, { 
 
     name: 'DATE_1', 
 
     type: 'date' 
 
    }, { 
 
     name: 'DATE_2', 
 
     type: 'date' 
 
    }] 
 
}); 
 

 

 

 
Ext.create("Ext.panel.Panel", { 
 
    title: "test", 
 
    renderTo: Ext.getBody(), 
 
    items: [{ 
 
     xtype: 'form', 
 
     defaults: { 
 
      labelAlign: 'top', 
 
      width: '95%' 
 
     }, 
 
     items: [ 
 
      Ext.create('Ext.grid.Panel', { 
 
       id: '<the id>', 
 
       selModel: Ext.create('Ext.selection.CheckboxModel', { 
 
        singleSelect: false, 
 
        sortable: false, 
 
        checkOnly: true 
 
       }), 
 
       store: myStore, 
 
       plugins: { 
 
        ptype: 'celledititing', 
 
        pluginId: 'celledit', 
 
       }, 
 
       parseDate: function(value) { 
 
        var me = this, 
 
         val = value, 
 
         altFormats = me.altFormats, 
 
         altFormatsArray = me.altFormatsArray, 
 
         i = 0, 
 
         len; 
 

 
        if (value && !Ext.isDate(value)) { 
 
         val = me.safeParse(value, me.format); 
 

 
         if (!val && altFormats) { 
 
          altFormatsArray = altFormatsArray || altFormats.split('|'); 
 
          len = altFormatsArray.length; 
 
          for (; i < len && !val; ++i) { 
 
           val = me.safeParse(value, altFormatsArray[i]); 
 
          } 
 
         } 
 
        } 
 

 
        // If configured to snap, snap resulting parsed Date to the closest increment. 
 
        if (val && me.snapToIncrement) { 
 
         val = new Date(Ext.Number.snap(val.getTime(), me.increment * 60 * 1000)); 
 
        } 
 
        return val; 
 
       }, 
 
       listeners: { 
 
        validateedit: { 
 
         fn: function(editor, e) { 
 
          var grid = editor.grid; 
 
          var date = grid.parseDate(e.value); 
 

 
          if(e.field=="DATE_1"){ 
 
           field = grid.startField 
 
          }else{ 
 
           field = grid.endField 
 
          } 
 
          if (!date) { 
 
           return false; 
 
          } 
 
          ///// validate your Fields HERE 
 
          
 
          return true; 
 
         } 
 
        } 
 
       }, 
 
       startField: null, 
 
       endField: null, 
 
        columns: [{ 
 
           text: 'Field 1', 
 
           dataIndex: 'FIELD_1', 
 
           width: '25%' 
 
          }, { 
 
           text: 'Field 2', 
 
           dataIndex: 'FIELD_2', 
 
           width: '25%' 
 
          }, { 
 
           text: 'Date 1', 
 
           dataIndex: 'DATE_1', 
 
           width: '25%', 
 
           renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
 
           editor: new Ext.create("Ext.form.field.Date",{ 
 
           xtype: 'datefield', 
 
           id: '<date id>', 
 
           dateRangeMin: '', 
 
           flex: 1, 
 
           listeners: { 
 
            change: function(field) { 
 
             this.up("gridpanel").startField = field; 
 
            } 
 
           }, 
 
           }) 
 
          }, { 
 
           text: 'Date 2', 
 
           dataIndex: 'DATE_2', 
 
           width: '25%', 
 
           renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
 
           editor: { 
 
            xtype: 'datefield', 
 
            id: '<date 2 id>', 
 
            dateRangeMin: '', 
 
            dateRangeMax:'', 
 
            flex: 1, 
 
            listeners: { 
 
             change: function(field) { 
 
              this.up("gridpanel").endField = field; 
 
             } 
 
            } 
 
           } 
 
          }], 
 
       
 
       plugins: { 
 
        ptype: 'cellediting', 
 
        clicksToEdit: 1 
 
       }, 
 
       height: 200 
 
      }) 
 
     ] 
 
    }] 
 
})
<html> 
 
    <head> 
 
    <link rel="stylesheet" href="https://cdn.sencha.com/ext/gpl/4.2.0/resources/css/ext-all.css"> 
 
    
 
    <script src="https://cdn.sencha.com/ext/gpl/4.2.0/ext-all-dev.js"></script> 
 
    
 
    </head> 
 
    </html>

Смежные вопросы