7
我突出顯示了日期選擇器顯示的月份中的多個日期。這是通過添加一個highlightDates功能到選取器組件Extjs日期選擇器。突出顯示月份更改日期的問題
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功能。
感謝您的任何建議。
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
:
非常感謝你,你真的幫了我,現在我下週開始以及:-) – grimmus