Dojo 自定义后台排序

Dojo本身提供了排序功能,但这种排序不是后台排序,如果页面有分页,只能在当前页排序,分页后排序将丢失。
这里提供一种实现后台排序方法,思路就是重写表头点击触发事件,将要排序的字段传递给后台。

<div class="tundra" id="batchGrid" dojoType="dojox.grid.DataGrid" store="initStore"  onHeaderCellClick="myGridSort" structure="layout" escapeHTMLInData="false"   noDataMessage="noData" autoHeight="true"></div>


红色标注就是当点击表头时我们要实现的方法,代码如下:

function myGridSort(e) {    
     columnSort = e.cellIndex;
     if(oldColumnSort&&columnSort!=oldColumnSort){
         systemlogsortAscending = false;
     }
     var data = e.rowIndex;       
     if (columnSort != -1) {        
             var propSort = layout[e.cellIndex].name;//   
             var sortby = layout[e.cellIndex].id;//
             if (sortby) {    
                    var cells_length = layout.length;//        
                    if (true) {             //                 
                          systemlogsortAscending = !systemlogsortAscending; //           
                          var order = 'DESC';            
                          if (systemlogsortAscending){                
                                    order = 'ASC';
                          }
                         //因为带有分页,所以要把某些数据保存到隐藏域
                        dojo.byId("sortby").value=sortby;
                        dojo.byId("order").value=order;
                        dojo.byId("cells_length").value=cells_length;
                        dojo.byId("columnSort").value=columnSort; 
                        dojo.byId("propSort").value=propSort; 
                        dojo.byId("sortAscending").value=systemlogsortAscending;
                        var form = document.getElementById("${param.formId}");
                        var url = form.action + "?sortby=" + sortby + "&order=" + order;   
                        oldColumnSort=columnSort;      
                         loadGridDataAJAX("${param.formId}", "${param.gridId}", url,cells_length, columnSort, propSort, systemlogsortAscending);                                         
         } 
      }  
    }
}




loadGridDataAJAX 代码如下:

function loadGridDataAJAX(formID, gridID , actionUrl,cells_length, columnSort, propSort,sortAscending){
        showProgressBar();
        dojo.xhrPost({
           url: actionUrl,
           handleAs: "json",
           form: formID, 
           load: function(resp, ioArgs){
           response = resp.data;

          document.forms[gridID + "PageInfoForm"]["paging.current"].value = "";

           if(typeof(resp) == "string") {
                   hideProgressBar(); 
                   return false; 
           }
           try{
                   dojo.byId(gridID + "currentPageNum").value = "";
                   var toPageRefreshObject = dijit.byId(gridID);
                   var gridItems = {items:resp.data};
                   toPageRefreshObject.setStore(new dojo.data.ItemFileReadStore({data:gridItems}));
                  dojo.byId(gridID + "totalRecord").innerHTML = resp.paging.totalRecord;
                  dojo.byId(gridID + "size").innerHTML = resp.paging.size;
                  dojo.byId(gridID + "currentPageNum").innerHTML = resp.paging.current; 
                  dojo.byId(gridID + "totalPageNum").innerHTML = resp.paging.total;
                  document.forms[gridID + "PageInfoForm"]["paging.size"].value = resp.paging.size; 
                  document.forms[gridID + "PageInfoForm"]["paging.queryCondition"].value =      resp.paging.queryCondition;
                  updateHeaderView(gridID, cells_length, columnSort, propSort,sortAscending); 
                  hideProgressBar();
              }catch(e){
                   hideProgressBar(); 
              }
           return resp;
      },
      error: function(resp,sss){ 
      hideProgressBar();
      }
      });
}



最后在列表页面代码:

dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.parser"); 

 var gridList = { identifier:'batch_ID',  items:${dojoGridVO.jsonData} }; 
 var initStore=new dojo.data.ItemFileReadStore({data:gridList}); 
 var layout = [ 
 {name:'<input type="checkbox" name="all" id="all" οnclick="selectAll(this)">', width:6,               get:getSelect},
 {id:'batchName', name:'<fmt:message key="batch.batchName" />', width: 15, field:"batchName"},
 {id:'batchExt', name:'<fmt:message key="batch.suffix" />', width: 6, field:"batchExt"}, 
 {id:'checked', name:'<fmt:message key="batch.checkStatus" />', width: 8, field:"checked"}, 
 {id:'posted', name:'<fmt:message key="batch.postStatus" />', width: 8, field:"posted"}, 
 {name:'<fmt:message key="batch.select" />', width:10, get:selectLink}, 
  {name:'<fmt:message key="batch.process" />', width: 'auto', get:processColumn}            
];



想让哪些字段排序就在layout里定义,给想要排序的列添加id:'batchName' 属性,这里batchName为传到后台的排序字段名称,这个通常与PO里面字段对应。如果此列不需要排序,就不要添加id属性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值