ExtJS - 表单上的脏检查仅在第一次起作用

时间:2011-04-19 06:37:28

标签: extjs

在提交编辑详细信息表单之前,我正在进行脏检查。这在表单加载后第一次工作,但如果我提交表单一次,脏检查将停止在后续调用中工作。

if(editForm.getForm().isDirty()) {
    editForm.getForm().submit( {
        url:'app/update',
        waitMsg:'Saving data',
        success:function(form,action) {
              Ext.Msg.alert("Success", "Successfully updated");
        },
        failure: function(form,action) {
              Ext.Msg.alert("Failure", "Failed to update");
        }
    });
} else {
    Ext.Msg.alert("Message", "Nothing has been changed since you last saved.");
}

4 个答案:

答案 0 :(得分:5)

这是因为您的表单正在将字段值与初始字段值进行比较。

您可以使用reset()方法在提交后重置表单。如果您需要让用户在同一表单上继续编辑,您可以使用loadRecord()方法重新加载包含最新数据的表单。或者您必须使用trackResetOnLoad属性。将此属性设置为true。

答案 1 :(得分:5)

这对我有用。我在成功提交表单后添加了这个。

form.getForm().getFields().each(function(field){
   field.resetOriginalValue( );
});

答案 2 :(得分:2)

你看过Ext.form.Panel属性trackResetOnLoad吗?尝试通过声明editForm.trackResetOnLoad = true将其设置为true;这可能有所帮助。祝你好运!

答案 3 :(得分:0)

我知道这是一个老帖子,但我想我会分享另一个解决方案。

isDirty()方法检查原始值。保存值后(在成功回调函数中),您可以使用此代码将原始值设置为新成功保存的值:

var fields = editForm.getForm.getFields().items;
Ext.each(fields, function(field){
    field.originalValue = field.getValue();
});