dojo.provide("navigationGrid");
dojo.require("dojox.grid.DataGrid");
dojo.require('dijit.Toolbar');
dojo.require("dijit.form.Button");
dojo.require("dijit.ToolbarSeparator");
/**
* 拓展grid插件,使其增加分页功能
*
* @author limingxin
*/
dojo.declare("navigationGrid",dojox.grid.DataGrid,{
// 当前页码号
currentPage : 1,totalPage : 1,maxPageNum : 5,// 页码按钮
_pageBtns : null,// 导航条对象
_naviBar : null,_firstBtn : null,_prvIoUsBtn : null,_nextBtn : null,_lastBtn : null,_pageLoaded : false,postCreate : function() {
try {
this.inherited(arguments);
this._pageBtns = [];
if (dijit.byId("myToolbar")) {
dijit.byId("myToolbar").destroy();
}
this._naviBar = new dijit.Toolbar( {
id : "myToolbar",style : "height:20px;text-align:right;"
});
this._firstBtn = new dijit.form.Button( {
label : "首页",disabled : true,iconClass : "navi-first",_onClick : dojo.hitch(this,'_locate','first')
});
this._prvIoUsBtn = new dijit.form.Button( {
label : "上一页",iconClass : "navi-prevIoUs",'pre')
});
this._nextBtn = new dijit.form.Button( {
label : "下一页",dir : "rtl",iconClass : "navi-next",'next')
});
this._lastBtn = new dijit.form.Button( {
label : "末页",iconClass : "navi-last",'last')
});
this._naviBar.addChild(this._firstBtn);
this._naviBar.addChild(new dijit.ToolbarSeparator());
this._naviBar.addChild(this._prvIoUsBtn);
this._naviBar.addChild(new dijit.ToolbarSeparator());
this._naviBar.addChild(this._nextBtn);
this._naviBar.addChild(new dijit.ToolbarSeparator());
this._naviBar.addChild(this._lastBtn);
} catch (e) {
console.info(e + "")
}
},_locate : function(s) {
try {
switch (s) {
case 'first':
this._navigate(1);
break;
case 'pre':
this._navigate(parseInt(this.currentPage) - 1);
break;
case 'next':
this._navigate(parseInt(this.currentPage) + 1);
break;
case 'last':
this._navigate(this.totalPage);
break;
default:
break;
}
} catch (e) {
console.info(e + "")
}
},_updateBtnStatus : function(pageNo) {
/*
* 更新按钮的状态和样式
*/
if (pageNo > 1) {
this._firstBtn.set('disabled',false);
this._prvIoUsBtn.set('disabled',false);
} else {
this._firstBtn.set('disabled',true);
this._prvIoUsBtn.set('disabled',true);
}
if (pageNo < this.totalPage) {
this._nextBtn.set('disabled',false);
this._lastBtn.set('disabled',false);
} else {
this._nextBtn.set('disabled',true);
this._lastBtn.set('disabled',true);
}
},/**
* 重新载入当前页面
*/
reload : function() {
var row = this._pageToRow(this.currentPage - 1);
this._fetch(row,true);
},/*
* 指向导航页面
*/
_navigate : function(pageNo) {
if (this.currentPage == pageNo) {
return
}
if (pageNo < 1 || pageNo > this.totalPage) {
return
}
this._updateBtnStatus(pageNo);
//触发分页查询
query(pageNo,"","1");
},_onFetchComplete : function(items,req) {
if (!this.scroller) {
return;
}
if (items && items.length > 0) {
dojo.forEach(items,function(item,idx) {
this._addItem(item,idx,true);
},this);
if (this._autoHeight) {
this._skipRowRenormalize = true;
}
this.updateRowCount(items.length);
this.updateRows(0,items.length);
if (this._autoHeight) {
this._skipRowRenormalize = false;
}
if (req.isRender) {
this.setScrollTop(0);
this.postrender();
} else if (this._lastScrollTop) {
this.setScrollTop(this._lastScrollTop);
}
}
delete this._lastScrollTop;
if (!this._isLoaded) {
this._isLoading = false;
this._isLoaded = true;
}
this._pending_requests[req.start] = false;
},// 重写父类的方法,初始化导航数字按钮
_onFetchBegin : function(size,req) {
this._updateButtons(size);
if (!size) {
this.views.render();
this._resize();
this.showMessage(this.noDataMessage);
this.focus.initFocusView();
return;
} else {
this.showMessage();
}
if (!this.scroller) {
return;
}
if (this.rowCount != this.rowsPerPage) {
if (req.isRender) {
this.scroller.init(this.rowsPerPage,this.rowsPerPage,this.rowsPerPage);
this.rowCount = this.rowsPerPage;
this._setAutoHeightAttr(this.autoHeight,true);
this._skipRowRenormalize = true;
this.prerender();
this._skipRowRenormalize = false;
} else {
this.updateRowCount(this.rowsPerPage);
}
}
},_clearData : function() {
this.inherited(arguments);
this.currentPage = 1;
this.totalPage = 1;
dojo.forEach(this._pageBtns,function(btn) {
btn.destroy();
})
this._pageBtns = [];
if (this._firstBtn) {
this._firstBtn.set('disabled',false);
}
if (this._prvIoUsBtn) {
this._prvIoUsBtn.set('disabled',false);
}
if (this._nextBtn) {
this._nextBtn.set('disabled',false);
}
if (this._lastBtn) {
this._lastBtn.set('disabled',false);
}
this._pageLoaded = false;
},_updateButtons : function(size) {
// TODO 先销毁按钮组
if (this._pageBtns) {
dojo.forEach(this._pageBtns,function(element) {
element.destroy();
})
this._pageBtns = [];
}
/**
* 初始化数字按钮条,经过特殊处理,限制了一页显示10,所以除以10, 不满足10的时候说明到了最后一页要补齐
*/
var totalPage = Math.round(this.totalPage/(size<10?'10':size));
var isShow = false;
var isFirstRightDot = false;
var isFirstLefttDot = false;
var beginIndex = 4;
for ( var i = 1; i <= totalPage; i++) {
if (i == 1 || i == 2 || i == totalPage || i == totalPage - 1
|| i == this.currentPage - 1 || i == this.currentPage - 2
|| i == this.currentPage + 1 || i == this.currentPage + 2) {
isShow = true;
}
if (this.currentPage == i) {
var numBtn = new dijit.form.Button( {
label : i,baseClass : "",tooltip : "第" + i + "页",style : {
border : "1px solid #A8AAE2",margin : "1px"
},cssStateNodes : {
"titleNode" : "navi"
},onClick : dojo.hitch(this,"_navigate",i)
});
this._pageBtns.push(numBtn);
numBtn.set('disabled',true);
dojo.addClass(numBtn.domNode,'navi-selected');
this._naviBar.addChild(numBtn,beginIndex);
beginIndex++;
} else {
if (isShow == true) {
var numBtn = new dijit.form.Button( {
label : i,style : {
border : "1px solid #A8AAE2",margin : "1px"
},cssStateNodes : {
"titleNode" : "navi"
},i)
});
this._pageBtns.push(numBtn);
this._naviBar.addChild(numBtn,beginIndex);
beginIndex++;
} else {
if (isFirstLefttDot == false && i == this.currentPage - 3) {
var numBtn = new dijit.form.Button( {
label : '...',disabled : true
});
this._pageBtns.push(numBtn);
this._naviBar.addChild(numBtn,beginIndex);
beginIndex++;
isFirstLefttDot = true;
}
if (isFirstRightDot == false && i > this.currentPage) {
var numBtn = new dijit.form.Button( {
label : '...',beginIndex);
beginIndex++;
isFirstRightDot = true;
}
}
}
isShow = false;
}
this.totalPage = totalPage;
// 设置按钮的状态
this._updateBtnStatus(this.currentPage);
}
});
function query(curPage,key,init){
var userListURL = "getAccountList.json";
var param = {'curPage':curPage,'pageSize':10,'searchStr':key,'first':init};
myAjax('userList',userListURL,param,function(response){
var json=eval(response["items"]);
var total = eval(response["total"]);
if(dijit.byId("gridOpenfile")){
dijit.byId("gridOpenfile").destroy();
}
var store = new dojo.data.ItemFileWriteStore({'data':{
identifier: "id",items: []
}});
for(var i = 0; i < json.length; i++){
obj = dojo.mixin({ id: i+1 },json[i]);
store.newItem(obj);
}
var column = [[
{'name': 'ID','field': 'id','width': '220px'},{'name': '姓名','field': 'name','width': '80px'},{'name': '密码','field': 'passwd',{'name': '可用资金','field': 'available','width': '100px'},{'name': '卖冻结','field': 'frozenSell',{'name': '买冻结','field': 'frozenbuy','width': '100px'}
]];
var grid = new navigationGrid({
id: 'gridOpenfile',store: store,structure: column,width: '680px',height: '300px',// 当前页码号
currentPage:curPage,// 总记录数
totalPage:total,// 一页最大显示数据量
maxPageNum:8,rowSelector: '20px'}
);
grid.placeAt("userList");
grid._naviBar.placeAt("userList");//把分页条初始化到表格下方
grid.startup();
dojo.style("userList",{width: '750px',height: '300px'});
grid.resize({w:'750px',h:'300px'})
grid.update();
// 绑定单击选择事件
grid.onSelected = function(index){
showMsg(grid.getRowNode(index).innerHTML,'',true);
}
});
}
原文链接:https://www.f2er.com/dojo/291448.html