Я выделяю несколько дат в месяц, когда отображается сборщик дат. Это делается путем добавления функции 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.
Спасибо за любой совет.
Большое спасибо, вы действительно помогли мне и теперь моя неделя начнется хорошо :-) – grimmus