Поле datepicker автоматически переключает день и месяц, когда первое di git равно 0 в Ext JS 6.7 - PullRequest
1 голос
/ 09 апреля 2020

Итак, я заметил странное поведение и не могу понять, почему он делает то, что делает.

Мой datepickerfield довольно прост:

xtype: 'datepickerfield',
name: 'birthday',
itemId: 'birthday',
label: 'Birthday',
dateFormat: 'd.m.Y',
required: true

Он работает так, как вы ожидаете , Вы можете нажать на кнопку, чтобы выбрать дату с помощью мыши или написать ее в каждой руке. Если вы не введете разделитель самостоятельно, он сообщит, что значение также не соответствует требуемому формату.

Однако, если вы введете дату вручную и введете 0, скажем 01072025, оно автоматически преобразует его в 07.01.2025. Так что не только то, что он автоматически устанавливает разделители, но и почему-то меняет день и месяц.

Почему это так и как я могу исправить или остановить такое поведение? В случае, если это не из самой Ext JS, у меня это происходило в Chrome, а также в Edge (пока не удосужился загрузить другие веб-браузеры).

1 Ответ

1 голос
/ 09 апреля 2020

Это поведение вызвано операцией метода parseValue в datafield компоненте:

...
   parseValue: function(value, errors) {
        var me = this,
            date = value,
            defaultFormat = me.getDateFormat(),
            altFormats = me.getAltFormats(),
            formats = altFormats ? [
                defaultFormat
            ].concat(altFormats) : [
                defaultFormat
            ],
            formatsLength = formats.length,
            i, format;
        if (date) {
            if (!Ext.isDate(date)) {
                for (i = 0; i < formatsLength; i++) {
                    format = formats[i];
                    date = Ext.Date.parse(value + ' ' + me.initTime, format + ' ' + me.initTimeFormat);
                    if (date) {
                        return Ext.Date.clearTime(date);
                    }
                }
            }
            if (date !== null) {
                return date;
            }
        }
        return this.callParent([
            value,
            errors
        ]);
    },
...

В этом компоненте метода выполняется анализ значения и значения формата.

В параметре altFormats указываются форматы, из которых возможно форматирование. altFormats содержит mdY. Поэтому, когда компонент пытается проанализировать 01072025, он интерпретируется как mdY, но не dmY. Вы должны добавить dmY| к заголовку строки altFormats, чтобы получить то, что вы хотите.

скрипка

...