Работа с формами в ExtJS 4

Создание форм

В предыдущих главах мы познакомились с различными элементами и компонентами и способами компоновки. И, как мы узнали, для организации множества компонентов в приложении используются контейнеры - панели, окна. В ExtJS для упорядочивания и работы с компонентами используются формы.

Формы представлены компонентом Ext.form.Panel, который по сути является той же панелькой-контейнером для других компонентов, только еще реализует дополнительный функционал форм. Создадим какую-нибудь простейшую форму, например, форму авторизации:

<style type="text/css">
    .field-margin {
        margin-left: 10%;
		margin-top:10px;
    }
</style>
<script>
Ext.onReady(function(){
    var formPanel=Ext.create('Ext.form.Panel',{
        title: 'Форма авторизации',
        width: 300,
        height:200,
		layout: 'anchor',
		defaults: {
			anchor: '80%'
		},
        renderTo: Ext.getBody(),
        items:[{
                xtype: 'textfield',
                fieldLabel: 'Логин',
                name: 'login',
                labelAlign: 'top',
                cls: 'field-margin',
                flex: 1
               }, {
                xtype: 'textfield',
                fieldLabel: 'Пароль',
                name: 'password',
                labelAlign: 'top',
                cls: 'field-margin',
                flex: 1
              }],		
		// кнопки формы
		buttons: [{
			text: 'Оправить',
			handler: function() {
				// действие отмены
			}
		}, {
			text: 'Отмена',
			handler: function() {
				// действие отправки
				}
		}],
    });
});
</script>
Пример формы в ExtJS 4

По сути та же самая панель с текстовыми полями и кнопками, только теперь эти поля составляют единство - форму, подобно формам html.

Доступ к полям формы

Все компоненты формы сосредоточены в свойстве items. Чтобы получить доступ к определенному полю формы, мы можем использовать метод get, в который передается индекс компонента в контейнере. А с помощью метода getValue у компонента мы можем получить введенное значение.

Например, получим значение первого текстового поля вышеопределенной формы:

<style type="text/css">
    .field-margin {
        margin-left: 10%;
		margin-top:10px;
    }
</style>
<script>
Ext.onReady(function(){
    var formPanel=Ext.create('Ext.form.Panel',{
        title: 'Форма авторизации',
        width: 300,
        height:200,
		layout: 'anchor',
		defaults: {
			anchor: '80%'
		},
        renderTo: Ext.getBody(),
        items:[{
                xtype: 'textfield',
                fieldLabel: 'Логин',
                name: 'login',
                labelAlign: 'top',
                cls: 'field-margin',
                flex: 1
               }, {
                xtype: 'textfield',
                fieldLabel: 'Пароль',
                name: 'password',
                labelAlign: 'top',
                cls: 'field-margin',
                flex: 1
              }],		
		// кнопки формы
		buttons: [{
			text: 'Оправить',
			handler: function() {
				// действие отмены
			}
		}, {
			text: 'Логин',
			handler: function() {
				var login = formPanel.items.get(0).items.get(0);
				alert(login.getValue());
				}
		}],
    });
});
</script>

Также мы можем получить не значения отдельных элементов, а всю форму в целом, использовав метод getForm(). Например, мы можем вывести значения всех полей формы следующим способом:

Ext.onReady(function(){
    var formPanel=Ext.create('Ext.form.Panel',{
        title: 'Форма авторизации',
        width: 300,
        height:200,
		layout: 'anchor',
		defaults: {
			anchor: '80%'
		},
			renderTo: Ext.getBody(),
			items:[{
					xtype: 'textfield',
					fieldLabel: 'Логин',
					name: 'login',
					labelAlign: 'top',
					cls: 'field-margin',
					flex: 1
				   }, {
					xtype: 'textfield',
					fieldLabel: 'Пароль',
					name: 'password',
					labelAlign: 'top',
					cls: 'field-margin',
					flex: 1
				  }],		

		buttons: [{
			text: 'Вывести данные',
			handler: function() {
				var login = formPanel.getForm();

				for(var i in login.getValues())
				{
					alert(login.getValues()[i]);
				}
			}
		}],
    });
});
    Поддержать сайт на родительском проекте КГБ