显示所选的extjs timefiled和datepicker值

时间:2017-09-25 10:40:39

标签: extjs

 items: [{
         xtype: 'form',
         stype: {
             marginTop: '10px'
         },
         layout: {
             type: 'hbox'
         },
         items: [{
             xtype: 'form',
             layout: {
                 type: 'vbox'
             },
             defaults: {
                 labelAlign: 'top',
                 width: 150
             },
             items: [{
                 xtype: 'button',
                 cls: 'datePickerSearchBtn',
                 text: 'Today',
                 listeners: {
                     click: function() {
                         // when clicking on this button need to set value to today in my datepicker
                     }
                 }
             }, {
                 xtype: 'button',
                 cls: 'datePickerSearchBtn',
                 text: 'Yesterday',
                 listeners: {
                     click: function() {
                         // when clicking on this button need to set value to yesterday in my datepicker
                         this.up('timeIntervalPanel').down('[name=startHourCombo]').reset();
                         this.up('timeIntervalPanel').down('[name=endHourCombo]').reset();
                     }
                 }
             }, {
                 xtype: 'button',
                 cls: 'datePickerSearchBtn',
                 text: 'Last 7 days',
                 listeners: {
                     click: function() {
                         this.up('timeIntervalPanel').setDates(Ext.Date.add(new Date(), Ext.Date.DAY, -7), new Date());
                         this.up('timeIntervalPanel').down('[name=startHourCombo]').reset();
                         this.up('timeIntervalPanel').down('[name=endHourCombo]').reset();
                     }
                 }
             }, {
                 xtype: 'button',
                 cls: 'datePickerSearchBtn',
                 text: 'Last Month',
                 listeners: {
                     click: function() {
                         this.up('timeIntervalPanel').setDates(Ext.Date.add(new Date(), Ext.Date.MONTH, -1), new Date());
                         this.up('timeIntervalPanel').down('[name=startHourCombo]').reset();
                         this.up('timeIntervalPanel').down('[name=endHourCombo]').reset();
                     }
                 }
             }]
         }, {
             xtype: 'form',
             border: true,
             layout: {
                 type: 'vbox',
                 align: 'center'
             },
             items: [{
                     xtype: 'container',
                     layout: 'hbox',
                     margin: '0 0 20 0',
                     items: [{
                         title: 'Start Date',
                         margin: '0 20 0 0',
                         header: {
                             titleAlign: 'center'
                         },
                         items: {
                             xtype: 'datepicker',
                             itemId: 'startDate',
                             value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                             showToday: false,
                             handler: function(picker, date) {

                                 var timeInterval = this.up('timeIntervalPanel');
                                 var endDate = timeInterval.endDate;
                                 //timeInterval.setDates(date, endDate);

                                 var oneDay = 24 * 60 * 60 * 1000;
                                 var diffDays = Math.round(Math.abs((endDate.getTime() - date.getTime()) / (oneDay)));
                                 if (diffDays > 29) {
                                     this.up('timeIntervalPanel').down('[name=startHourCombo]').disable();
                                     this.up('timeIntervalPanel').down('[name=text]').disable();
                                     this.up('timeIntervalPanel').down('[name=endHourCombo]').disable();
                                 } else {
                                     this.up('timeIntervalPanel').down('[name=startHourCombo]').enable();
                                     this.up('timeIntervalPanel').down('[name=text]').enable();
                                     this.up('timeIntervalPanel').down('[name=endHourCombo]').enable();
                                 }
                             }

                         }
                     }, {

                         title: 'End Date',
                         margin: '0 20 0 0',
                         header: {
                             titleAlign: 'center'
                         },
                         items: {
                             xtype: 'datepicker',
                             itemId: 'endDate',
                             value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                             showToday: false,
                             handler: function(picker, date) {

                                 var timeInterval = this.up('timeIntervalPanel');
                                 var startDate = timeInterval.startDate;
                                 //timeInterval.setDates(startDate, date);

                                 var oneDay = 24 * 60 * 60 * 1000;
                                 var diffDays = Math.round(Math.abs((date.getTime() - startDate.getTime()) / (oneDay)));
                                 if (diffDays > 30) {
                                     this.up('timeIntervalPanel').down('[name=startHourCombo]').disable();
                                     this.up('timeIntervalPanel').down('[name=text]').disable();
                                     this.up('timeIntervalPanel').down('[name=endHourCombo]').disable();

                                 } else {
                                     this.up('timeIntervalPanel').down('[name=startHourCombo]').enable();
                                     this.up('timeIntervalPanel').down('[name=text]').enable();
                                     this.up('timeIntervalPanel').down('[name=endHourCombo]').enable();
                                 }
                             }

                         }
                     }]
                 },
                 {
                     xtype: 'container',
                     layout: 'hbox',
                     items: [{
                             margin: '0 20 0 0',
                             items: {
                                 xtype: 'timefield',
                                 name: 'startHourCombo',
                                 id: 'startTime',
                                 maxWidth: 100,
                                 columnWidth: 0.2,
                                 minValue: '12:00 AM',
                                 maxValue: '11:00 PM',
                                 increment: 60,
                                 anchor: '100%',
                                 value: '12:00 AM',
                                 disabled: false,
                                 listeners: {
                                     change: function() {
                                         var timeIntervalPanel = this.up('timeIntervalPanel');
                                         timeIntervalPanel.setDates(timeIntervalPanel.startDate, timeIntervalPanel.endDate);
                                     }
                                 }

                             }
                         }, {
                             margin: '0 20 0 0',
                             items: {
                                 xtype: 'displayfield',
                                 name: 'text',
                                 maxWidth: 80,
                                 minWidth: 30,
                                 columnWidth: 0.2,
                                 value: 'To',
                                 disabled: false
                             }
                         },
                         {
                             xtype: 'timefield',
                             name: 'endHourCombo',
                             id: 'endTime',
                             maxWidth: 100,
                             minValue: '12:00 AM',
                             maxValue: '11:00 PM',
                             increment: 60,
                             anchor: '100%',
                             value: '12:00 AM',
                             disabled: false,
                             listeners: {
                                 change: function() {
                                     var timeIntervalPanel = this.up('timeIntervalPanel');
                                     timeIntervalPanel.setDates(timeIntervalPanel.startDate, timeIntervalPanel.endDate);
                                 }
                             }

                         }
                     ]
                 }
             ]


         }]

     }],

     setDates: function(startDate, endDate) {

         if (!startDate) startDate = new Date();

         if (!endDate) endDate = new Date();

         this.startDate = startDate;
         this.endDate = endDate;

         var startDatePicker = this.down('datepicker#startDate');
         var endDatePicker = this.down('datepicker#endDate');
         var startTime = this.up().down('timefield#startTime');
         var endTime = this.up().down('timefield#endTime');

         startDatePicker.setValue(startDate);
         endDatePicker.setValue(endDate);
         startDatePicker.setMaxDate(endDate);
         endDatePicker.setMinDate(startDate);

         var startDateValue = Ext.Date.format(startDate, 'd-m-Y');
         var endDateValue = Ext.Date.format(endDate, 'd-m-Y');
         this.setText(startDateValue + " " + startTime.getRawValue() + " TO " + endDateValue + " " + endTime.getRawValue());
     }

 });

1 个答案:

答案 0 :(得分:0)

只需在两个时间段的更改事件中调用setDates(),然后获取这些时间段的值,并将其添加到按钮的setText()

示例代码:

Ext.application({
  name: 'Fiddle',
  launch: function() {
    Ext.create('Ext.form.Panel', {
      border: true,
      renderTo: Ext.getBody(),
      layout: {
        type: 'hbox'
      },
      listeners: {
        afterrender: function(button) {
          button.setDates();
        }
      },
      setDates: function(startDate, endDate) {
        if (!startDate) startDate = new Date();

        if (!endDate) endDate = new Date();

        this.startDate = startDate;
        this.endDate = endDate;

        var startDatePicker = this.down('datepicker#startDate');
        var endDatePicker = this.down('datepicker#endDate');

        startDatePicker.setValue(startDate);
        endDatePicker.setValue(endDate);
        startDatePicker.setMaxDate(endDate);
        endDatePicker.setMinDate(startDate);

      },
      items: [{
          xtype: 'container',
          layout: {
            type: 'vbox',
            align: 'center'
          },
          defaults: {
            labelAlign: 'top',
            width: 150
          },
          items: [{
            xtype: 'button',
            cls: 'datePickerSearchBtn',
            text: 'Today',
            listeners: {
              click: function() {
                // when clicking on this button need to set value to today in my datepicker
              }
            }
          }, {
            xtype: 'button',
            cls: 'datePickerSearchBtn',
            text: 'Yesterday',
            listeners: {
              click: function() {
                // when clicking on this button need to set value to yesterday in my datepicker
                this.up('form').down('[name=startHourCombo]').reset();
                this.up('form').down('[name=endHourCombo]').reset();
              }
            }
          }, {
            xtype: 'button',
            cls: 'datePickerSearchBtn',
            text: 'Last 7 days',
            listeners: {
              click: function() {
                this.up('form').setDates(Ext.Date.add(new Date(), Ext.Date.DAY, -7), new Date());
                this.up('form').down('[name=startHourCombo]').reset();
                this.up('form').down('[name=endHourCombo]').reset();
              }
            }
          }, {
            xtype: 'button',
            cls: 'datePickerSearchBtn',
            text: 'Last Month',
            listeners: {
              click: function() {
                this.up('form').setDates(Ext.Date.add(new Date(), Ext.Date.MONTH, -1), new Date());
                this.up('form').down('[name=startHourCombo]').reset();
                this.up('form').down('[name=endHourCombo]').reset();
              }
            }
          }]
        },
        {
          xtype: 'container',
          layout: {
            type: 'vbox',
            align: 'center'
          },
          items: [{
              xtype: 'container',
              layout: 'hbox',
              margin: '0 0 20 0',
              items: [{
                title: 'Start Date',
                margin: '0 20 0 0',
                items: {
                  xtype: 'datepicker',
                  value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                  itemId: 'startDate',
                  showToday: false,
                  handler: function(picker, date) {
                    var timeIntervalPanel = this.up('form');
                    var endDate = timeIntervalPanel.endDate;
                    timeIntervalPanel.setDates(date, endDate);
                  }
                }
              }, {

                title: 'End Date',
                margin: '0 20 0 0',
                items: {
                  xtype: 'datepicker',
                  itemId: 'endDate',
                  value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                  showToday: false,
                  handler: function(picker, date) {
                    var timeIntervalPanel = this.up('form');
                    var startDate = timeIntervalPanel.startDate;
                    timeIntervalPanel.setDates(startDate, date);
                  }
                }
              }]
            },
            {
              xtype: 'container',
              layout: 'hbox',
              margin: '0 20 0 0',
              items: [{
                  xtype: 'timefield',
                  name: 'startHourCombo',
                  id: 'startTime',
                  minValue: '12:00 AM',
                  maxValue: '11:00 PM',
                  increment: 60,
                  value: '12:00 AM',
                },
                {
                  xtype: 'timefield',
                  name: 'endHourCombo',
                  id: 'endTime',
                  minValue: '12:00 AM',
                  maxValue: '11:00 PM',
                  increment: 60,
                  value: '11:00 PM',
                }
              ]
            },
          ]
        }
      ]
    });
  }


});
<link rel="stylesheet" href="https://cdn.sencha.com/ext/gpl/4.1.1/resources/css/ext-all.css">
<script type="text/javascript" src="https://cdn.sencha.com/ext/gpl/4.1.1/ext-all-debug.js"></script>