Extjs 4:立即禁用Extjs表单中的所有输入元素

时间:2012-02-16 05:10:37

标签: forms extjs extjs4 elements

我创建了一个extjs表单,它使用列布局分为两部分,其中包含大约10-15个输入元素。如何根据条件一次禁用所有这些输入元素。目前我已经创建了一个函数来获取表单中的所有组件,并使用ext.each循环遍历每个元素来禁用它们

这是我使用的功能

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'这样的功能。

4 个答案:

答案 0 :(得分:7)

如果您在ExtJs 4.x中使用FormPanel,那么您正在寻找 -

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

getForm()方法返回Ext.form.Basic对象,使用此类,您还可以使用getFields()访问此表单上的所有字段,然后您可以迭代所有要执行的字段任何东西。

希望这会有所帮助并祝你好运: - )

答案 1 :(得分:4)

面板的禁用/启用方法怎么样?这似乎更容易。

panel.disable();

panel.enable();

答案 2 :(得分:1)

这是一个建议..既然你说你的表格分为两个部分,你为什么不把它们放在FieldSet?您可以使用一种方法(即setDisabled

将整个字段集禁用

这将避免循环组件并一个接一个地禁用/启用它们。

答案 3 :(得分:0)

您可以使用表单面板的cascade函数,这是ExtJs的方法,但如果您检查级联函数的源代码,您将看到它也使用for循环。使用级联功能的唯一好处是它也适用于具有嵌套面板的表单。我认为你的实现不会像这样的情况正常工作。