2012-02-16 7 views
2

Я создал форму extjs, которая разделена на 2 части с использованием раскладки столбцов и содержит почти 10-15 элементов ввода. Как я могу отключить все эти элементы ввода за раз в зависимости от состояния. В настоящее время я создал функцию, которая fetchs все компоненты в форме и с использованием цикла ext.each через каждый элемент, чтобы отключить ихExtjs 4: отключить все входные элементы в форме Extjs сразу

Вот функция, которую я использую

function prepare_form_view(form){ 
    var f=Ext.getCmp(form); 
    var els=f.query('component'); 
    Ext.each(els,function(o){ 
     var xtype=o.getXType(); 
     if(xtype=='textfield'||xtype=='combobox'||xtype=='datefield'||xtype=='textareafield'||xtype=='button'){ 
      o.disabledCls='myDisabledClass'; 
      o.disable(); 
     } 
    }); 
} 

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

+0

Престола [ссылка] (http://stackoverflow.com/questions/9368466/extjs4-how-to-disable-all-fields-and-all- кнопки-на-панели-рекурсивно) – A1rPun

ответ

1

предложение .. так как вы говорите, что ваша форма делится на две части, почему бы вам не положить их в FieldSet? Вы можете отключить набор полей в целом одним способом, то есть setDisabled.

Это позволит избежать перекосов компонентов и отключить их/включить их один за другим.

+0

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

0

Вы можете использовать функцию cascade на панели формы, которая является способом ExtJs, но если вы проверите исходный код функции каскада, вы увидите, что он также использует цикл for. Единственным преимуществом использования каскадной функции является то, что она будет работать и для форм с вложенными панелями. Я думаю, что ваша реализация не будет работать должным образом в таком случае.

3

Что касается метода отключения/включения панели? Это кажется намного проще.

panel.disable(); 

panel.enable(); 
+0

Он также отключает панель инструментов панели, иначе это работает хорошо. –

7

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

yourFormPanel.getForm().applyToFields({disabled:true}); 

Метод getForm() возвращает объект Ext.form.Basic, с этим классом, вы также мог бы получить доступ ко всем полям этой формы с помощью getFields(), тогда вы можете итератором все поля делать что угодно.

Надеется, что это помогает и удачам :-)

+0

пробовал то же самое в 4.2, но не работал для меня. – sparsh610

Смежные вопросы