2012-02-16 29 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