Решение проблемы со временем в ExtJS 3 (после patch’а KB2998527)

в 12:49, , рубрики: extjs, javascript, Библиотека ExtJS/Sencha, браузеры, разработка под windows

Всем доброго времени суток!

Прочитав очередную статью про проблему со временем в JavaScript (для браузеров Windows (RU) после patch'а KB2998527), я стал понимать, что мало кто приводит общее решение для ExtJS 3.

Вероятно, вы уже в курсе проблемы, а если нет, то стоит прочесть статью «Хром, укравший рождество». Она важна для веб-разработчиков, клиенты которых из РФ.

Ещё до появления статьи наткнулся на этот баг. Сначала я и мой коллега подумали, что проблема с обновлением Chrom'а, но через час уже нашли компонент, который и приводил к зависанию, им оказался Ext.form.TimeField. Дальнейший анализ привёл к функции:

generateStore: function(initial){
        var min = this.minValue || new Date(this.initDate).clearTime(),
            max = this.maxValue || new Date(this.initDate).clearTime().add('mi', (24 * 60) - 1),
            times = [];

        while(min <= max){
            times.push(min.dateFormat(this.format));
            min = min.add('mi', this.increment);
        }
        this.bindStore(times, initial);
    }

Как видите, для получения значений используется цикл. На тот момент я его изменил на for c 0 до (24 * 60) / this.increment.

Но уже после, поняв, в чём проблема (в нашем случае this.initDate = '1/1/2008', где следующий «пропавшая» среда 02/01/2008), написал небольшой патч:

Ext.override(Ext.form.TimeField, {
    initDate: '2/1/2008'
});

Т.е. мы всего лишь указываем день, чтобы следующий не был средой, подробнее. Для новых версий всё аналогично, они там так же используют initDate как 1/1/2008.

Автор: chamaeleon

Источник

Поделиться

* - обязательные к заполнению поля