在ExtJs2.2 中有一个扩展可以分页,但遗憾的是在Ext3.0下不能运行。根据Ext2.2也扩展了一个在Ext3.0下的分页树
前台js
Ext.onReady(function() {
var tree = new Ext.tree.TreePanel({
renderTo: 'tree-ct',
width: 300,
height: 400,
autoScroll: true,
plugins: new Ext.ux.tree.TreeNodeMouseoverPlugin(), //must use the plugin
loader: new Ext.ux.tree.PagingTreeLoader({ //use the extend TreeLoader
dataUrl: 'Handler.ashx',
pageSize: 2, //the count of the childnode to show every time,default 20
enableTextPaging: true, //whether to show the pagination's text
pagingModel: 'local' //local means client paging ,remote means server paging,default local
}),
root: new Ext.tree.AsyncTreeNode({ id: '0', text: '所有类别',expanded: true }),
listeners:{
render:function(tree){
},
expandnode:function(sNode){
if (sNode.attributes.ptb)sNode.attributes.ptb.show();this.body.unmask();
},
collapsenode:function(sNode){
if (sNode.attributes.ptb)sNode.attributes.ptb.hide();
}
}
});
})
[{id:1,text:'node1',leaf:false,children:[{...},...{...}]},{id:1,text:'node2',leaf:true},...,{id:100,text:'node100',leaf:true}]
后台分页实现:
JS代码只需要将pagingModel:'local'改成pagingModel:'remote'即可
后台则需要做更多的事情,后台将会接收到几个参数,分别是:
node: 欲展开(分页)的结点ID
start: 开始结点的序号,当结点第一次取数展开时,start为0,每翻一页,start在原来的值上加上limit(见下)
limit: 每页显示的结点数目,为前台pageSize的值
total: 总结点数目(只要在翻页时才传,结点第一次展开时因为没有,所以不传)
为什么要传total这个值呢?
结点第一次展开时,后台要从数据库或别的地方求得total总数,以及取从start开始的limit个结点信息
当结点展开后,在进行翻页时,此时后台没必要再进行total总数的重复计算,只需取到从start开始的limit个结点信息既可
所以后台可以判断是否有total这个值,有就不求了,没有(第一次展开结点)才去求
后台返回的JSON必须是以下格式:
{total:200,nodes:[{id:1,text:'node1',leaf:false},...,{id:100,text:'node100',leaf:false}]}
要有total值,并将结点信息数组赋给nodes属性
![](http://hi.csdn.net/attachment/201012/22/10253_12930039169OIB.png)