我有一个表格,其中包含一些我提交的字段。 一个字段不应该直接修改,而是通过GUI(它是一个简单的表达式,如“A eq B”或“C contains D”。
所以我有2个组合框(A,B,C,D),(eq,包含,不包含)和文本字段。 当我的组合框和文本字段发生更改时,我会向该只读字段写入一个值。
问题是,form.isDirty()会考虑这些字段。我想排除它们。
答案 0 :(得分:2)
最简单的可能是覆盖表单或字段isDirty
方法。根据您的选择,它可能会影响表单处理的其他方面。
请参阅this fiddle中的示例。
覆盖表单(请参阅the code of the original method):
var form = new Ext.form.Panel({
renderTo: Ext.getBody(),
items: [{
xtype: 'textfield'
,name: 'testField'
,fieldLabel: 'Test field'
},{
xtype: 'textfield'
,name: 'ignoredField'
,fieldLabel: 'Ignored Field'
,skipDirty: true
}],
buttons: [{
text: 'Is dirty?'
,handler: function() {
alert(form.isDirty());
}
}]
});
Ext.override(form.getForm(), {
isDirty: function() {
return !!this.getFields().findBy(function(f) {
return !f.skipDirty && f.isDirty();
});
}
});
覆盖字段:
var form2 = new Ext.form.Panel({
renderTo: Ext.getBody(),
items: [{
xtype: 'textfield'
,name: 'testField'
,fieldLabel: 'Test field'
},{
xtype: 'textfield'
,name: 'ignoredField'
,fieldLabel: 'Ignored Field'
,isDirty: function() {
return false;
}
}],
buttons: [{
text: 'Is dirty?'
,handler: function() {
alert(form2.isDirty());
}
}]
});
答案 1 :(得分:1)
如果您希望字段与表单完全分离。您可以将字段上的isFormField属性设置为false。
答案 2 :(得分:0)
另一种方式:
var form2 = new Ext.form.Panel({
renderTo: Ext.getBody(),
items: [{
xtype: 'textfield'
,name: 'testField'
,fieldLabel: 'Test field'
},{
xtype: 'textfield'
,name: 'ignoredField'
,fieldLabel: 'Ignored Field'
,listeners: {
change: function(fld) {
fld.resetOriginalValue();
}
}
}],
buttons: [{
text: 'Is dirty?'
,handler: function() {
alert(form2.isDirty());
}
}]
});