Вы здесь

extjs form custom validator или как сделать сложный валидатор сразу на два поля

Если возникла необходимость сделать в extjs custom form validator, или проще говоря свой валидатор на форме, то вот один из вариантов решения.Рассмотрим задачу. Есть поисковая форма на extjs. В этой форме есть два поля с датой, которые задают интервал поиска. Нужно произвести проверку на длинну интервала, и если временной интервал превышает 31 день, то выдать сообщение об ошибке.

Фирменное руководство extjs по этому поводу не дает никаких примеров. А те примеры, что есть в сети предлагают решение на основе всплывающего окна с сообщением об ошибке. Я же предлагаю решение, работающее так же как и родные валидаторы.

Создадим наши поля на форме, заполним их значениями по-умолчанию и навесим фунецию проверки значений на правильность:

 
 

А вот и собственно функция проверки:

 

На ней остановлюсь подробнее. Сначала мы вычисляем временной интервал между начальной и конечной датами. getValue возвращает обьект типа date. а его метод format форматирует дату так как нам нужно. Мы ее переведем в секунды. Потом отнимем от конечной даты начальную и проверим, чтоюы этот интервал был не более 31 дня.

Если интервал больше 31 дня, то при помощи метода markInvalid мы помечаем оба поля нашим сообщением об ошибке, а если меньше, то при помощи clearInvalid  сбрасываем у обоих полей статус ошибки.

В результате имеем форму, на которой валидатор обрабатывает сразу два поля.

Примечание:

При вызове

 

ваша функция валидатор выполнится один лишний раз: собственно при создании формы.

Попробуйте вместо этого свойство validate

 

Комментарии

спасибо, очень помогло!