2012-02-21 82 views
1

我有3個面板,每個面板將有7 - 10個字段。Extjs 4動態添加多個面板到一個表格

主表單面板包含一個組合字段和3個面板。

基於組合選定的值,我隱藏了其餘2個面板並顯示了一個面板。

所有這三個面板都有allowBlank: false驗證的字段。

提交表單時,隱藏的字段也會被驗證並阻止表單提交。所以我想禁用隱藏的字段。我正在使用此代碼。

question_multiple_option.query('.component').forEach(function(c){c.setDisabled(true);}); 

但在EXT 4.X禁用的字段也提交表單時驗證。

在Ext 2.X和3.X禁用字段未驗證,未提交。

以前我用這個代碼在內線2.X

Ext.getCmp('option').cascade(function(comp){ 
         if (comp.isFormField) { 
          //comp.enable(); 
           comp.disable(); 
         } 
        }); 

它是實現由隱藏和顯示面板多個面板形式的正確方法。或者我如何動態添加/刪除面板到窗體?

有沒有更好的方法來實現這種形式。

謝謝。

回答

1

很好措辭q。

它不應該驗證禁用的字段。

關於此問題,有一個bug已在4.1中修復。我不確定它在你使用的任何4.x版本中的外觀,但是如果你不能遷移,你可以在你的代碼中添加一個覆蓋到isValid方法的Ext.form.field.Base以匹配4.1代碼。類似這樣的:

Ext.override(Ext.form.field.Base, { 
    isValid : function() { 
     var me = this; 
     return me.disabled || Ext.isEmpty(me.getErrors()); 
    } 
}); 
+0

謝謝@Geronimo。我用'isValid = me.disabled ||替換了src/form/CheckBoxGroup.js文件中的no 370行'isValid = Ext.isEmpty(errors)'。 Ext.isEmpty(錯誤)'。但我仍然面臨同樣的問題。會有什麼問題? – nani1216 2012-02-22 06:16:50

+0

像在bug報告中說的那樣編輯該行只會影響CheckBox字段。您應該在您自己的代碼中添加我上面提到的覆蓋,以便它適用於所有表單域。 – Geronimo 2012-02-22 16:11:34

+0

如果我放置上述代碼,則禁用radiogroup按鈕也會生效,並且在提交表單時未驗證剩餘的textfields – nani1216 2012-02-23 05:29:00