Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Элементы формы (https://javascript.ru/forum/extjs/16359-ehlementy-formy.html)

NickSun 05.04.2011 13:29

Элементы формы
 
Есть форма для добавления/редактирования клиента. В шаблоне формы прописаны все поля которые могут на ней быть. Для нового пользователя часть полей показывать не нужно, также не нужно показывать некоторые поля при редактировании пользователя (в зависимости от определенных условий). Подскажите как это можно реализовать? Есть ли какое-нибудь событие отвечающее за то что данные в форму были загружены?

Код формы:
var EditCustomerFormPanel = new DefaultFormPanel({
	id: 'EditCustomerFormPanel',
	tbar: EditCustomerTB,
	title: 'Edit Customer',
	reader: new Ext.data.XmlReader({
		record: 'item',
		success: '@success'
	}, ['user_id', 'login', 'parent_id', 'u_password', 'secret_question', 'secret_answer', 'lname', 'fname', 'email', 'address', 'city', 'zip', 'gender', 'state_id', 'pricing_plan_id', 'birthday', 'home_phone', 'cell_phone', 'comments', 'account_status', 'info_match_with_bill_info', 'reseller_name', 'discount', 'domain_prefix', 'group_id']),
	region: 'center',
	cls: 'bgw br bl bb',
	baseCls: 'whitebg',
	layout: 'form',
	border: false,
	labelWidth: 175,
	bodyStyle: 'padding:5px 5px 0',
	defaults: {
		width: 250
	},
	items: [
		{
			xtype: 'hidden',
			name: 'save_customer',
			value: 1
		},
		{
			xtype: 'hidden',
			name: 'user_id',
			id: 'user_id',
			value: 0
		},
		{
			allowBlank: false,
			xtype: 'textfield',
			fieldLabel: 'Login (*)',
			name: 'login'
		},
		...
		{
			xtype: 'checkbox',
			fieldLabel: 'Send Verification Email',
			name: 'send_email',
			value: 1,
			style: {
				display: 'none'
			}
		},
		{
			xtype: 'button',
			id: 'resend_email',
			text: 'Resend Verification Email',
			handler: sendVerEmail,
			style: {
				display: 'none',
				marginTop: '20px'
			}
		}
	]
});

VKS 05.04.2011 17:27

var myFormPanel = new Ext.form.FormPanel({
    title: 'Client and routing info',
    items: [{
        fieldLabel: 'Client',
        name: 'clientName'
    }, {
        fieldLabel: 'Port of loading',
        name: 'portOfLoading'
    }, {
        fieldLabel: 'Port of discharge',
        name: 'portOfDischarge'
    }]
});

myFormPanel.getForm().load({
    url: '/getRoutingInfo.php',
    params: {
        consignmentRef: myConsignmentRef
    },
    success : function(form, action) {
        Ext.Msg.alert("Load sucess", action.response.responseText);
    },
    failure: function(form, action) {
        Ext.Msg.alert("Load failed", action.response.errorMessage);
    }
});


Проверяй с помощью success и failure

VKS 05.04.2011 17:31

Цитата:

Для нового пользователя часть полей показывать не нужно, также не нужно показывать некоторые поля при редактировании пользователя (в зависимости от определенных условий). Подскажите как это можно реализовать?
myFormPanel.items.get(0).hide();
myFormPanel.items.get(0).show();

Где 0 - это порядковый номер в массиве myFormPanel.items

NickSun 06.04.2011 11:50

VKS, спасибо за пример, но как узнать что данные загружены если используется XmlReader ?

NickSun 06.04.2011 16:08

Разобрался. Нужно так:
EditCustomerFormPanel.on({
	actioncomplete: function(form, action) {
		if (action.type == 'load') {
			//смотрим что пришло и прячем/показываем поля
		}
	}
});

NickSun 06.04.2011 16:10

Возник следующий вопрос - как спрятать/показать такое поле:
{
	xtype: 'checkbox',
	id: 'send_email',
	fieldLabel: 'Send Verification Email',
	name: 'send_email',
	value: 1,
	hidden: true
}

если так Ext.getCmp('send_email').hide(); то прячится только чекбокс, а лейба остается

NickSun 06.04.2011 16:26

Разобрался, так:
var send_email_chk = Ext.getCmp('send_email');
send_email_chk.container.up('div.x-form-item').hide();
send_email_chk.hide();


Часовой пояс GMT +3, время: 12:13.