jQuery easyui dataGrid 動態改變排序欄位名,一般情況下,在使用的時候,我們會點選相應欄位進行排序,這裡以JAVA為例,後端的實體類欄位有可能和資料庫的欄位不一致; 如:實體類中的
阿新 • • 發佈:2018-12-17
jQuery easyui dataGrid 動態改變排序欄位名,一般情況下,在使用的時候,我們會點選相應欄位進行排序,這裡以JAVA為例,後端的實體類欄位有可能和資料庫的欄位不一致;
如:實體類中的屬性為userName,前臺filed="userName"
而資料庫的欄位為user_name,這個時候如果把userName設定為排序列,然後去進行點選,就會丟擲異常,因為dataGrid在排序的時候會以filed="userName"中的欄位名為排序欄位;
問題:
怎麼把userName和資料庫中的user_name進行做對映
解決方案:
1:在後臺伺服器端對前臺傳入的排序欄位進行判斷,並且手工進行對映為資料庫中的欄位名;
優點:安全、資料庫欄位不會暴露在前臺HTML頁面中;
缺點:後臺程式碼中會出現很多的欄位對映判斷;
2:在前臺點選排序欄位列的時候做判斷,通過JS指令碼在前臺頁面判斷進行對映為資料庫中的欄位名;
優點:方便,不需要修改伺服器端程式碼
缺點:不安全,資料庫真實欄位名會暴露在HTML頁面中;
注意:如果對安全性要求比較高建議選擇第一種;
這裡採用第二種方式,實現如下:
/** *在點選排序欄位時,改變傳入後臺的欄位 *param對應onBeforeLoad事件的引數 *map自定義的欄位對映Map */ onSortColumn=function(param,map){ //取出map中欄位的對映關係值 var fieldSort=map[param.sort]; if(fieldSort!='' && fieldSort!=undefined){ //設定新的排序欄位名,設定完之後,傳送請求時一併會發送到服務端 param.sort=fieldSort; } } //建立Map var map = new Map(); //為map新增值;key:對應filed="userName"中的欄位名;value:對應資料庫的欄位 map['userName']='user_name'; $('#datagrid').datagrid({ onBeforeLoad:function(param){ onSortColumn(param,map); } });