ExtJs如何判斷form表單是否被修改過詳解


1.Extjs表單提交主要有三種方式:

1, EXT的form表單ajax提交(默認提交方式) 
     相對單獨的ajax提交來說優點在於能省略寫參數數組 ,form.getForm().submit

3、EXT的ajax提交,Ext.Ajax.request

2、EXT表單的非ajax提交  

在我看來:采用第1,2種都很方便,關鍵是Ext.Ajax.request傳遞給后台是一個字符串形式的,需要Jason解析

2.記錄代碼問題:

 1 SaveStudentDetails:function(btn,event){  2         var form = Ext.getCmp('StudentDetailsForm');  3         var formValues = form.getValues();  4         var userstore = this.getStore('StudentList');  5         if(form.getForm().isDirty()==false){  6             Ext.MessageBox.alert('提示','您沒有修改或新增任何資料');  7             return;  8  }  9  form.getForm().submit({ 10             clientValidation: true, 11                url: 'updateInf.action', 12  params: { 13                 newStatus: 'delivered'
14  }, 15                 success : function(form2, action){ 16                     Ext.Msg.alert('更新提示' , action.result.msg) ; 17  userstore.load(); 18                     btn.up('window').close(); 19  console.log(form); 20     console.log(form2); 21                     //form.up('window[id=StudentDetailsWindow]').close();
22                     //form.up('window').close(); 
23  }, 24                 failure : function(form , action){ 25                     switch(action.failureType){ 26                         case Ext.form.action.Action.CLIENT_INVALID : 27                             Ext.Msg.alert('修改失敗', '表單填寫錯誤,輸入無效值或沒填完'); 28                             break ; 29                         case Ext.form.action.Action.CONNECT_FAILURE : 30                             Ext.Msg.alert('修改失敗', '表單填寫錯誤,輸入無效值或沒填完'); 31                             break ; 32                         case Ext.form.action.Action.SERVER_INVALID : 33                             Ext.Msg.alert('更新提示', action.result.msg); 34  } 35  } 36  }); 37     },    

 問題1:ExtJs如何判斷form表單是否被修改過?怎樣讓Form表單修改才能提交?

看代碼5-8,這里使用isDirty()判斷,實現效果圖如圖所示:

但是這里有個問題,就是這個form的字段是loadRecord來的,

var form = win.down('form').getForm(); 
form.loadRecord(record);

 

所以無論怎樣,這里的form.isDirty總是true,因為form只要load就意味着它的值被改變了,所以在view層的form里要加上一句話:trackResetOnLoad:true,

 參考資料:http://doc.okbase.net/wangs7345/archive/111076.html

 

trackResetOnLoad是在form表單load數據的時候是否記錄字段原始值的開關。 在setVlaues中會根據這個開關進行判斷,如果為true就記錄這個數據。 

如果為trackResetOnLoad:true,,則表單對象的form.reset()方法重置到最后一次加載的數據或setValues()數據,以相對於一開始創建表單那時的數據。  

 

 問題2:怎樣使得Form值修改之后的值立即展示

  代碼行17,把它的store重新load了一下

 

問題3:怎樣使修改之后窗口就關閉

  代碼行18-22,這里的Window可以通過btn和Window里面的form找到

  但是有個問題,為什么success里面的form是form2,因為要操作的form和success里面的form不是一個,success里面的form是form.Basic里面的,不是這里關閉的form

  所以這里的window可以通過3種方式找到

  btn.up('window').close();   form.up('window[id=StudentDetailsWindow]').close();   form.up('window').close(); 

問題4:Extjs什么時候用getForm(),什么時候不用getForm()
  查看api,當說到BasicForm的時候就getForm
  當使用一個方法時候,如果這個form.panel里面有就可以直接使用,如果沒有,就查Ext.Basic ,這個時候用到的就是Basic類型的,就要getForm



  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM