您的位置:首页 > 其它

Ext 3.0下 treepanel 分页

2010-12-22 15:48 309 查看
在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();

}

}

});

})

---------------------------------------------------------
使用前台分页,后台取结点信息不需要做特殊处理,只需要根据Ext传过去的node参数变量(欲展开的结点ID),获取下一层结点即可,返回JSON格式如:
[{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属性
---------------------------------------------------------------
如图:



--------------
后台代码

using System;
using System.Web;

public class Handler : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.Write("[{id:1,text:'默认类别',leaf:false,children:[{id:11,text:'node11',leaf:true},{id:12,text:'node12',leaf:true},{id:13,text:'node13',leaf:true},{id:14,text:'node14',leaf:true},{id:15,text:'node15',leaf:true},{id:16,text:'node16',leaf:true}]},{id:2,text:'计时类',leaf:false,children:[{id:21,text:'node21',leaf:true},{id:22,text:'node22',leaf:true},{id:23,text:'node23',leaf:true},{id:24,text:'node24',leaf:true},{id:25,text:'node25',leaf:true},{id:26,text:'node26',leaf:true}]},{id:101,text:'蔬菜类',leaf:false,children:[{id:102,text:'node102',leaf:true},{id:103,text:'node103',leaf:true},{id:104,text:'node104',leaf:true},{id:105,text:'node105',leaf:true},{id:106,text:'node106',leaf:true},{id:107,text:'node107',leaf:true}]}]");
}

public bool IsReusable {
get {
return false;
}
}

}
----------------------------
需要导入文件:PagingTreeLoader.js
需要的话可以留下邮箱:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: