我尝试编写方法,为表单上的所有字段设置readOnly属性。
我的代码:
Ext.override(Ext.form.Panel,{
setReadOnlyForAll: function(bReadOnly) {
this.cascade(function(f) {
if (f.isFormField) {
f.setReadOnly(bReadOnly);
}
});
});
从Ext.form.Panel调用此方法:
this.setReadOnlyForAll(false);
但这种方法工作得很慢。有人知道如何提高速度吗?谢谢!
答案 0 :(得分:6)
cascade
检查当前容器的每个子项(例如Ext.form.Panel
),这意味着您要检查当前子项是否为表单字段。
因此,使用Ext.form.Basic.getFields
方法获取每个表单字段:
Ext.define ('Your_form_Panel', {
extend: 'Ext.form.Panel' ,
setReadOnlyForAll: function (bReadOnly) {
this.getForm().getFields().each (function (field) {
field.setReadOnly (bReadOnly);
});
}
});
此外,我建议您使用Ext.define
代替Ext.override
。
答案 1 :(得分:5)
在Wilk的建议(使用ExtJS 4.1.1a)的情况下,我仍然遇到了9秒的延迟,在表格(带有嵌套表格)上将〜90个字段设置为readOnly。
为了进一步改善这一点并从9秒减少到< 1秒我添加了对Ext.suspendLayouts()和Ext.resumeLayouts()全局变量的调用,以允许框架批处理组件布局。
Ext.define('My.Panel', {
extend: 'Ext.form.Panel',
setReadOnlyForAll: function(readOnly) {
Ext.suspendLayouts();
this.getForm().getFields().each(function(field) {
field.setReadOnly(readOnly);
});
Ext.resumeLayouts();
}
});
答案 2 :(得分:2)
很简单。只需在表单中添加此配置:
var formPanel = Ext.create('Ext.form.Panel', {
fieldDefaults: {
labelAlign: 'right',
labelWidth: 85,
msgTarget: 'side',
readOnly : true //all fiels are in readOnly mode
},
defaultType: 'textfield',
items: [{
fieldLabel: 'Nome',
name: 'nome'
}, {
fieldLabel: 'Cognome',
name: 'cognome'
}
]
}],
});