如何从isDirty()检查中排除字段?

时间:2014-07-29 09:41:07

标签: extjs

我有一个表格,其中包含一些我提交的字段。 一个字段不应该直接修改,而是通过GUI(它是一个简单的表达式,如“A eq B”或“C contains D”。

所以我有2个组合框(A,B,C,D),(eq,包含,不包含)和文本字段。 当我的组合框和文本字段发生更改时,我会向该只读字段写入一个值。

问题是,form.isDirty()会考虑这些字段。我想排除它们。

3 个答案:

答案 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());
    }
}]
});