ExtJs4 как отключить все поля и все кнопки на панели рекурсивно
Я пытаюсь отключить все доступные для редактирования компоненты, доступные на панели.
Вызов panel.disable()
выделяется, но кнопки по-прежнему доступны для клика.
Тот же результат дает panel.cascade
функцию, которая отключает каждый компонент.
Каков правильный способ сделать это?
Ответы
Ответ 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);
});