Extjs 4:一次性禁用Extjs表单中的所有输入元素

3
我创建了一个使用列布局分为两个部分的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”函数的东西。


请查看此链接 - A1rPun
4个回答

9
如果您正在使用ExtJs 4.x中的FormPanel,那么这就是您要寻找的内容 -
yourFormPanel.getForm().applyToFields({disabled:true});
getForm() 方法返回 Ext.form.Basic 对象。使用这个类,你也可以通过 getFields() 访问表单上的所有字段,然后你可以迭代所有字段来进行任何操作。
希望这有所帮助,祝你好运:-)

4
面板的禁用/启用方法怎么样?这似乎更容易。
panel.disable();

panel.enable();

它还会禁用面板的工具栏,否则这个功能很好。 - Glenn Lawrence

1

这里有一个建议…既然你说你的表单被分成了两个部分,为什么不将它们放在FieldSet中呢?你可以使用一个方法来禁用整个fieldset,即setDisabled

这样可以避免组件循环和一个接一个地禁用/启用它们。


谢谢您的回复,Abdel。但正如我所说,我想在其他表格中使用此功能。而不同的表格具有不同的布局... - Nick

0
你可以使用表单面板的cascade函数,这是ExtJs的方法来实现它,但如果你检查cascade函数的源代码,你会发现它也使用了for循环。使用cascade函数的唯一好处是它也适用于嵌套面板的表单。我认为你的实现在这种情况下可能无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接