1. 程式人生 > >jquery easyui dataGrid動態改變排序欄位名

jquery easyui dataGrid動態改變排序欄位名

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