2012-02-16 34 views
2

我創建了一個extjs表單,它使用列布局分爲2個部分,並具有幾乎10-15個輸入元素。如何根據條件一次禁用所有這些輸入元素。目前,我已經創建了去抓取所有的形式,並通過每個元素使用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 2012-10-02 08:30:11

回答

1

這是一個建議..既然你說你的表格分爲兩部分,你爲什麼不把它們放在FieldSet?您可以使用一種方法整體禁用字段集,即setDisabled

這樣可以避免組件循環和禁用/啓用它們。

+0

謝謝你的回覆Abdel。但正如我所說我想與其他形式也使用此功能。和不同的形式有不同的佈局... – Nick 2012-02-16 06:25:43

0

你可以使用ExtJs方式的窗體面板的cascade函數來完成它,但是如果你檢查級聯函數的源代碼,你會發現它也使用了for循環。使用級聯函數的唯一好處是,它也可以用於嵌套面板的表單。我認爲你的實現將不能正常工作。

3

面板的禁用/啓用方法呢?這似乎更容易。

panel.disable(); 

panel.enable(); 
+0

它也禁用面板的工具欄,否則這效果很好。 – 2015-06-24 05:38:00

7

如果您在ExtJS的4.x中使用這是FormPanel中,你在找什麼 -

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

getForm()方法返回Ext.form.Basic對象,這個類,你也可以使用getFields()訪問此表單上的所有字段,然後您可以迭代所有字段以執行任何操作。

希望這有助於和好運:-)

+0

在4.2中嘗試過,但沒有爲我工作。 – sparsh610 2015-05-19 12:32:48