2016-11-25 2 views
7

Я выделяю несколько дат в месяц, когда отображается сборщик дат. Это делается путем добавления функции highlightDates к компоненту PickerExtjs date picker. Выдача вопросов, связанных с датами изменения месяца

Ext.override(Ext.form.field.Picker, { 

    highlightDates: function (picker, dates) { 

     if (Ext.isEmpty(dates)) return; 
     for(var i = 0; i < dates.length; i++) { 
      var t = new Date(dates[i].date), 
       dtMillis = t.getTime(), 
       offset = t.getTimezoneOffset() * 60 * 1000, 
       dt = dtMillis + offset, 
       cells = picker.cells.elements; 

      for (var c = 0; c < cells.length; c++) { 
       var cell = Ext.fly(cells[c]); 
       if (cell.dom.firstChild.dateValue == dt) { 
        cell.addCls('cell-highlight'); 
        break; 
       } 
      } 
     } 
    } 
}); 

Даты объекта, переданного в функцию выше, является переменным параметром, от вызова Ajax в контроллере.

getDates: function (cmp) { 
    var me = this; 
    Ext.Ajax.request({ 
     url: 'someurl', 
     success: function (response) { 
      me.specificDates = Ext.JSON.decode(response.responseText).specificDates; 
     } 
    }); 
} 

Контроллер также содержит функцию, которая будет вызывать прослушиватель выбора даты.

setDatesToHighlight: function(picker){ 
    picker.highlightDates(picker.picker,this.specificDates); 
} 

Наконец, это называется, когда выбор даты становится видимым с помощью расширения слушателя

items: [{ 
    xtype: 'datefield', 
    editable: false, 
    listeners: { 
     expand: 'setDatesToHighlight' 
    } 
}] 

Это все работает отлично, пока я не изменить месяц в селекторе. Кажется, я больше не могу вызвать функцию setDatesToHighlight, поэтому выделенные месяцы дат будут подсвечены.

Я думал, что могу переопределить метод обновления на сборщике, но мне трудно получить объект дат, который мне нужно передать функции highlightDates.

Спасибо за любой совет.

ответ

5

Вы можете запустить событие на каждом обновлении, переопределив Ext.picker.Date вместо Ext.form.field.Picker и добавления переопределения функции update как:

Ext.override(Ext.picker.Date, { 

    update: function (e) { 
     var res = this.callParent(arguments); 

     if (!this.pickerField) { 
      return res; 
     } 

     this.pickerField.fireEvent('update', this); 

     return res; 
    }, 

    highlightDates: function (picker, dates) { 
     . . . 
    } 
}); 

Теперь вы можете изменить слушателя от expand к update.

Рабочий пример: https://fiddle.sencha.com/#view/editor&fiddle/1l94

+0

Большое спасибо, вы действительно помогли мне и теперь моя неделя начнется хорошо :-) – grimmus