Extjs日期选择器.在月份更改时突出显示日期

gri*_*mus 7 extjs

我突出显示日期选择器显示的一个月内的一些日期.这是通过向Picker组件添加highlightDates函数来完成的

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;
                }
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

传递给上面函数的日期对象是来自控制器中的Ajax调用的变量集.

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

控制器还包含日期选择器扩展侦听器将调用的函数.

setDatesToHighlight: function(picker){  
    picker.highlightDates(picker.picker,this.specificDates);
}
Run Code Online (Sandbox Code Playgroud)

最后,使用展开侦听器使日期选择器可见时调用此方法

items: [{
    xtype: 'datefield',
    editable: false,
    listeners: {
        expand: 'setDatesToHighlight'
    }
}]
Run Code Online (Sandbox Code Playgroud)

这一切都正常,直到我改变选择器中的月份.我似乎无法再次触发setDatesToHighlight控制器功能,因此选中的月份日期会突出显示.

我想我可以覆盖选择器上的更新方法,但我很难获得我需要传递给highlightDates函数的日期对象.

谢谢你的建议.

CD.*_*D.. 5

您可以通过覆盖Ext.picker.Date而不是Ext.form.field.Pickerupdate函数添加覆盖来触发每个更新的事件,如:

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) {
       . . .
    }
});
Run Code Online (Sandbox Code Playgroud)

现在您可以将侦听器更改expandupdate.

工作示例:https://fiddle.sencha.com/#view/editor&fiddle/1l94