1. 程式人生 > >jQuery easyui dataGrid 動態改變排序欄位名,一般情況下,在使用的時候,我們會點選相應欄位進行排序,這裡以JAVA為例,後端的實體類欄位有可能和資料庫的欄位不一致; 如:實體類中的

jQuery easyui dataGrid 動態改變排序欄位名,一般情況下,在使用的時候,我們會點選相應欄位進行排序,這裡以JAVA為例,後端的實體類欄位有可能和資料庫的欄位不一致; 如:實體類中的

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);
  }
});