PagingToolbar使用

在Ext的PagingToolbar主键,需要在store中有两个参数:limit和start,这样PagingToolbar才可以根据这两个参数进行分页处理。

但如果你的后台应用的分页是根据pagenum和pagesize来处理的,那么你就需要做点工作来做一个变通,实现分页的效果。

 

方法1:不改变Ext组件。

在服务器端获取limit和start的参数,通过运算来得到pagenum,limit可以直接当作pagesize。

这种方式需要你修改服务器端的代码。

 

方法2:扩展Ext的PagingToolbar组件。

注:以下代码有网上找到,再次感谢作者。

Ext.PagingToolbarEx = Ext.extend(Ext.PagingToolbar, {
    afterPageText: '/ {0}',
    beforePageText: '页',
    displayInfo: true,
    displayMsg: '显示 {0} - {1} / {2}',
    emptyMsg: '没有数据',
    firstText: '第一页',
    prevText: '前一页',
    nextText: '后一页',
    lastText: '最后一页',
    refreshText: '刷新',
    
    updateInfo: function(){
        if(this.displayEl){
            var count = this.store.getCount();
            
            var msg = count == 0 ? this.emptyMsg : String.format(this.displayMsg, this.cursor, this.cursor + count - 1, this.store.getTotalCount());
            
            this.displayEl.update(msg);
        }
    },
    
    onLoad: function(store, r, o){
        if(!this.rendered){
            this.dsLoaded = [store, r, o];
            
            return;
        }
        
        if(!o.params || this.store.getTotalCount() == 0){
            this.cursor = 0;
        }
        else{
            this.cursor = (o.params[this.paramNames.start] - 1) * this.pageSize + 1;
        }
        
        var d =this.getPageData(), ap = d.activePage, ps = d.pages;
        
        this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
        this.field.dom.value = ap;
        
        this.first.setDisabled(ap == 1 || ps == 0);
        this.prev.setDisabled( ap == 1 || ps == 0);
        this.next.setDisabled(ap == ps || ps == 0);
        this.last.setDisabled(ap == ps || ps == 0);
        this.loading.enable();
        this.loading.setDisabled(ps == 0);
        this.updateInfo();    
    },
    
    getPageData: function(){
        var total = this.store.getTotalCount();
        
        return {
            total: total,
            activePage: total != 0 && this.cursor == 0 ? 1 : Math.ceil(this.cursor / this.pageSize),
            pages: total !=0 && total < this.pageSize ? 1 : Math.ceil(total / this.pageSize)
        }
    },
    
    onClick: function(which){
        var store = this.store;
        var d = this.getPageData();
        
        switch(which){
            case 'first':
                this.doLoad(1);
                break;
            case 'prev':
                this.doLoad(Math.max(1, d.activePage - 1));
                break;
            case 'next':
                this.doLoad(Math.min(d.pages, d.activePage + 1));
                break;
            case 'last':
                this.doLoad(d.pages);
                break;
            case 'refresh':
                this.doLoad(d.activePage);
                break;
        }
    },
    
    onPagingKeydown: function(e){
        var k = e.getKey(), d = this.getPageData(), pageNum;
        
        if(k == e.RETURN){
            e.stopEvent();
            
            pageNum = this.readPage(d)
            
            if(pageNum >= d.pages){
                pageNum = d.pages;
            }
            else if(pageNum <= 1){
                pageNum = 1;
            }
            
            this.doLoad(pageNum);
    
        }
        else if(k == e.HOME || k == e.END){
            e.stopEvent();
            pageNum = k == e.HOME ? 1 : d.pages;
            this.field.dom.value = pageNum;
        }
        else if(k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
            e.stopEvent();
            
            if(pageNum = this.readPage(d)){
                var increment = e.shiftKey ? 10 : 1;
                
                if(k == e.DOWN || k == e.PAGEDOWN){
                    increment *= -1;
                }
                
                pageNum += increment;
                
                if(pageNum >= 1 & pageNum <= d.pages){
                    this.field.dom.value = pageNum;
                }
            }
        }
    }
});

Ext.reg('pagingtoolbarex', Ext.PagingToolbarEx);

 

这种方法的好处就是后台无需做任何修改,比较适合于后台由其他第三方提供的应用场合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值