2011-04-19 84 views
0

我在提交編輯詳細信息表單之前正在進行髒檢。這是在表單加載後第一次工作,但如果我提交表單一次,髒檢查在隨後的調用中停止工作。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."); 
} 
+0

我不認爲會有更快的方法來實現這一點。 'isDirty'是一種循環遍歷所有字段並查找髒字段的方法,因此如果修改了與首先加載的數據不同的任何位,它總是會返回「true」。 – 2011-04-19 06:56:57

回答

5

這是因爲您的表單正在比較字段值與初始字段值。

您可以使用reset()方法在提交後重置表單。如果您需要提供用戶以繼續編輯相同的表單,則可以使用loadRecord()方法以最新數據重新加載表單。或者你將不得不使用trackResetOnLoad屬性。將此屬性設置爲true。

+0

我試過editForm.getForm()。reset(); editForm.getForm()。loadRecord(action.result.data);在成功回調中,但它仍然沒有工作。 – Joji 2011-04-19 07:41:53

+0

我的不好。它應該是 - 'editForm.getForm()。loadRecord(action.result);' – Joji 2011-04-19 09:33:30

2

你看過Ext.form.Panel屬性trackResetOnLoad嗎?嘗試通過聲明editForm.trackResetOnLoad = true將其設置爲true;這可能有幫助。祝你好運!

0

我知道這是一箇舊帖子,但我想我會分享另一個解決方案。

isDirty()方法檢查原始值。在保存的值(在你的成功回調函數),你可以有這樣的代碼,其設置originalValues到新的成功保存的值:

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

這爲我工作。我在一個成功的表單提交後添加了這個。

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