Подтвердить что ты не робот

ExtJs4 как отключить все поля и все кнопки на панели рекурсивно

Я пытаюсь отключить все доступные для редактирования компоненты, доступные на панели.

Вызов panel.disable() выделяется, но кнопки по-прежнему доступны для клика. Тот же результат дает panel.cascade функцию, которая отключает каждый компонент.

Каков правильный способ сделать это?

4b9b3361

Ответ 1

Если вы используете ExtJs 4.x, это то, что вы ищете -

myFormPanel.query('.field, .button').forEach(function(c){c.setDisabled(false);});

(Измените свой селектор на основе сложности вашей формы. Вы можете просто использовать .component, и он отключит весь компонент в вашей форме)

См. также - Ext.ComponentQuery

Если вы используете 3.x, вы можете добиться такого же эффекта в два этапа, как это:

myFormPanel.buttons.forEach(function(btn){btn.setDisabled(true);}); //disable all buttons
myFormPanel.getForm().items.each(function(itm){itm.setDisabled(true)}); //disable all fields

Ответ 2

Предполагая, что вы использовали FormPanel, вы можете использовать этот метод для получения формы:

getForm() // see http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.Panel-method-getForm

Это вернет объект Ext.form.Basic. Отсюда вы можете получить доступ ко всем полям этой формы с помощью метода:

getFields() // see http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.Basic-method-getFields

Теперь ку может перебирать поле и отключать его. Обратите внимание также на метод applyToFields(), где вы можете передать свой объект. См. Информацию API: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.Basic-method-applyToFields

Удачи!

Ответ 3

Это лучшее решение для отключения всех полей формы внутри панели формы.

var formPanelName = Ext.ComponentQuery.query('#formPanelId field');
for(var i= 0; i < formPanelName.length; i++) {
   formPanelName[i].setDisabled(true);
}

Просто получите ссылку на поля панели формы. Перейдите по каждому полю и используйте функцию setDisabled, чтобы установить для атрибута readOnly значение true.

Вы также можете взять его в комплекте и захватить всю панель формы. Это решение выше только захватывает отдельные разделы панели формы по его идентификатору. extjs 4

Ответ 4

Для тех, кто вручную добавляет поля и поля на панель формы, ExtJS не требует, чтобы вы добавляли компоненты непосредственно в форму, сначала создавая getForm(). Это в основном для удобства и позволяет стандартным функциям работать правильно. Итак, какой бы компонент вы не выполнили, добавьте его из итерации.

Пример 1:

Обычно вы не должны использовать "id" для получения компонента, поскольку он задается динамически. Но это показывает, как можно получить панель формы с помощью getCmp.

            var formPanel = Ext.getCmp('id-of-component');
            var fieldSet = Ext.create('Ext.form.FieldSet', {
                title: 'field set'                    
            });
            formPanel.add(fieldSet);

При повторении вы сделаете следующее:

formPanel.each(function(item) {
  alert(item.title);
});

Пример 2:

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

            var formPanel = Ext.getCmp('id-of-component');
            var fieldSet = Ext.create('Ext.form.FieldSet', {
                title: 'field set'                    
            });
            formPanel.getForm().add(fieldSet);

При повторении вы сделаете следующее:

formPanel.getForm().each(function(item) {
  alert(item.title);
});