Рішення проблеми з часом у ExtJS 3 (після patch'а KB2998527)

Всім доброго часу доби!

Прочитавши чергову статті про проблему з часом у JavaScript для браузерів Windows (UA) після 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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.