Валидация полей формы

Когда мы рассматривали текстовые поля в одной из прошлых глав, мы видели, что можно проводить их валидацию с помощью таких свойств, как allowBlank и minLength/maxLength. Кроме того, для валидации полей формы в ExtJS мы можем применять синглтон Ext.form.field.VTypes.

VType предоставляет функцию валидации, сообщение об ошибках, которое появляется при неудаче валидации. Кроме того, с помощью VType можно установить маску регулярного выражения, которое позволит отсеять нежелательные символы.

Фреймворк уже имеет несколько шаблонных функций для валидации по умолчанию:

var formPanel=Ext.create('Ext.form.Panel',{ 
    title: 'Форма Запроса',
	bodyStyle:'padding:5px 5px 0',
		width: 300,
		height:150,
		renderTo: Ext.getBody(),
    items: [{   
				xtype: 'textfield',
                fieldLabel: 'Е-mail',
                name: 'email',
				vtype:'email'
            },
            {
                xtype: 'textfield',
                name: 'url', 
                fieldLabel: 'URL',
				vtype:'url'
            }]
    });

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

Валидация в ExtJS 4

Создание своей логики валидации

Так как набор встроенных способов валидации довольно ограничен, то нам может потребоваться создать свою логику валидации. Для этого нам надо переопределить VType. Этот объект состоит из трех частей:

При создании своих объектов VType используются некоторые соглашения по именованию. Посмотрим на примере. Допустим, создадим следующий объект vtype для валидации серии и номера паспорта:

var passNumberVType = {
		passNumber: function(val, field){
			var passNumberRegex = /^\d{4}\s\d{6}$/;
			return passNumberRegex.test(val);
		},
		passNumberText: 'Серия и номер паспорта должны содержать только цифры и между ними должен стоять пробел!',
		passNumberMask: /[\d\s]/
	};

Здесь определен vtype под именем passNumber. Поэтому маска ввода (passNumberMask) и параметр текста сообщения (passNumberText) имеют в своем названии в качестве префикса имя объекта.

Переменная passNumberRegex задает регулярное выражение для номера/серии паспорта, и если оно не соответствует переданному в параметре val значению, то ввод неудачен. Регулярное выражение очень простое - сначала идет 4 цифры (d{4}), потом знак пробела (\s), а потом еще 6 цифр.

Тогда форма ввода будет использовать vtype следующим образом:

Ext.apply(Ext.form.field.VTypes, passNumberVType);
	var formPanel=Ext.create('Ext.form.Panel',{ 
		title: 'Форма Запроса',
		bodyStyle:'padding:5px 5px 0',
			width: 400,
			height:130,
			layout: 'anchor',
			defaults: {
				anchor: '80%'
			},
			renderTo: Ext.getBody(),
		items: [{
					xtype: 'textfield',
					name: 'url', 
					fieldLabel: 'Серия и номер пасспорта',
					vtype:'passNumber'
				}]
		});

Первая строка (Ext.apply(Ext.form.field.VTypes, passNumberVType);) применяет объект валидации синглтону Ext.form.field.VTypes, который и содержит все объекты валидации.

Создание валидации в ExtJS 4
comments powered by Disqus
Изучаем Ext JS 4
↑ Выше
Содержание
    Поддержать сайт на родительском проекте КГБ