Всем доброго времени суток!
Прочитав очередную статью про проблему со временем в JavaScript (для браузеров Windows (RU) после patch'а KB2998527), я стал понимать, что мало кто приводит общее решение для ExtJS 3.
Вероятно, вы уже в курсе проблемы, а если нет, то стоит прочесть статью «Хром, укравший рождество». Она важна для веб-разработчиков, клиенты которых из РФ.
Ещё до появления статьи наткнулся на этот баг. Сначала я и мой коллега подумали, что проблема с обновлением Chrom'а, но через час уже нашли компонент, который и приводил к зависанию, им оказался Ext.form.TimeField. Дальнейший анализ привёл к функции:
Как видите, для получения значений используется цикл. На тот момент я его изменил на for c 0 до (24 * 60) / this.increment.
Но уже после, поняв, в чём проблема (в нашем случае this.initDate = '1/1/2008', где следующий «пропавшая» среда 02/01/2008), написал небольшой патч:
Т.е. мы всего лишь указываем день, чтобы следующий не был средой, подробнее. Для новых версий всё аналогично, они там так же используют initDate как 1/1/2008.
Прочитав очередную статью про проблему со временем в 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.
