2013-11-13 5 views
1

Это extjs mixin для проверки даты от даты или начала даты окончания в форме. вот Mixin .. (основной код был взят из сенча форума :)) использованияФильтрация полей даты с даты начала или окончания даты

Ext.define("AMShiva.mixin.DateRangeValidator", { 
    timerange: function (val, field) { 
     /// <summary> 
     /// This will validate two datefields 
     /// </summary> 

     var me = this; //will be the form, containing datefields 

     var time = field.parseDate(val); 
     if (!time) { 
      return; 
     } 
     if (field.startTimeField && (!this.timeRangeMax || (time.getTime() != this.timeRangeMax.getTime()))) { 
      var start = me.down('datefield[name=' + field.startTimeField + ']'); 
      start.maxValue = time; 
      start.validate(); 
      this.timeRangeMax = time; 
     } 
     else if (field.endTimeField && (!this.timeRangeMin || (time.getTime() != this.timeRangeMin.getTime()))) { 
      var end = me.down('datefield[name=' + field.endTimeField + ']'); 
      end.minValue = time; 
      end.validate(); 
      this.timeRangeMin = time; 
     } 
     return true; 
    } 
}); 

образца выше Mixin

Это частичный разрез из формы.

{ 
     xtype: 'datefield', 
     fieldLabel: 'From', 
     name: 'from_date', 
     format: 'Y-m-d', 
     editable: false, 

     endTimePeriod:'to_date', //below component 
     validationEvent: 'change', 
     validator: function (value) { 
      return me.timerange(value, this); 
     } 
    }, 
    { 
     xtype: 'datefield', 
     fieldLabel: 'To', 
     format: 'Y-m-d', 
     name: 'to_date', 
     editable: false, 

     startTimeField:'from_date', //above component 
     validationEvent: 'change', 
     validator: function (value) { 
      return me.timerange(value, this); 
     } 
    } 
+0

Хорошей работы, добавив все примеры кода, но я отсутствую ясный вопрос, обозначается вопросительным знаком. – Alexander

+0

Для более общего и расширяемого решения вы можете проверить этот вопрос - http://stackoverflow.com/a/34159877/2667065 –

ответ

1

Пользовательского VType DateRange для проверки диапазона дат:

Ext.apply(Ext.form.VTypes, { 
    daterange : function (val, field) { 
     var date = field.parseDate(val); 
     if (!date) { 
      return false; 
     } 
     if (field.startDate && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) { 
      var start = Ext.getCmp(field.startDate); //field.up('form').down('#'+field.startDate); 
      start.setMaxValue(date); 
      start.validate(); 
      this.dateRangeMax = date; 

     } else if (field.endDate && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) { 
      var end = Ext.getCmp(field.endDate); //field.up('form').down('#' + field.endDate); 
      end.setMinValue(date); 
      end.validate(); 
      this.dateRangeMin = date; 
     } 
     return true; 
    }, 
    daterangeText : Ext.BUNDLE.getMsg('Label.daterangetext') 
}); 

С датой и до настоящего времени компоненты

{ 
    xtype : 'panel', 
    items : [{ 
      xtype : 'displayfield', 
      value : 'From Date' 
     }, { 
      id : 'msgFromDate', 
      xtype : 'datefieldplus', 
      vtype : 'daterange', 
      endDate : 'msgToDate' 
     } 
    ] 
}, { 
    xtype : 'panel', 
    items : [{ 
      xtype : 'displayfield', 
      value : 'To Date' 
     }, { 
      id : 'msgToDate', 
      xtype : 'datefieldplus', 
      vtype : 'daterange', 
      startDate : 'msgFromDate' 
     } 
    ] 
} 
Смежные вопросы