2012-02-21 70 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