我创建了一个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'这样的功能。
答案 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循环。使用级联功能的唯一好处是它也适用于具有嵌套面板的表单。我认为你的实现不会像这样的情况正常工作。