`

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);

 

这种方法的好处就是后台无需做任何修改,比较适合于后台由其他第三方提供的应用场合
分享到:
评论

相关推荐

    extjs使用pagingtoolbar时,点击下一页,出现查询结果和查询条件不的解决办法

    然而,在实际使用过程中,我们可能会遇到一些问题,比如在点击“下一页”按钮时,加载的数据与预设的查询条件不符。这个问题通常出现在服务器端分页的场景,因为PagingToolbar默认传递的参数只有`start`和`limit`,...

    extjs 分页

    EXTJS分页通常与数据访问对象(DAO)和动作控制器(Action)结合使用,形成一个完整的数据获取和展示流程。下面将详细阐述EXTJS分页的核心概念、实现方法以及DAO和Action在其中的作用。 一、EXTJS分页核心概念 1. ...

    Ext JS PagingToolbar 组件

    PagingToolbar通常与Ext JS的数据存储(如Store)和数据网格(如GridPanel)一起使用,以加载和展示数据的特定部分,而无需一次性加载所有数据,从而提高应用程序的性能。 在标准的Ext JS PagingToolbar中,每页...

    Extjs TreeStore+pagingToolbar 分页

    TreeStore是ExtJS中用于表示树形数据结构的组件,它可以与各种UI组件(如TreePanel)配合使用,展示层级化的数据。在这个主题中,我们将深入探讨如何结合TreeStore和pagingToolbar实现分页功能。 在传统的表格数据...

    ExtJS 自定义分页控件---- PM3PagingToolbar.js

    参考: Ext.PagingToolbar.js 如有BUG还请各位提出或留言. 附件中有图片, 一看就知道. 用法: var grid = new Ext.grid.GridPanel({ bbar: new Ext.PM3PagingToolbar({ store : store, displayInfo : true, ...

    EXTJS3 Ext.PagingToolbar() 快捷键应用

    通常,这样的代码会使用EXTJS的事件监听机制,如`addListener`(或其简写`on`)方法,来注册键盘事件。例如: ```javascript var toolbar = new Ext.PagingToolbar({ // 其他配置项... }); toolbar.on('render', ...

    ExtJs自定义分页控件----PM3PagingToolbar.js

    非传统分页工具. 简单说明下: ...参考: Ext.PagingToolbar.js 因为我开发测试完这个分页工具后, 电脑上显示刚好是15:00, 所以取名: PM3PagingToolbar 如有BUG还请各位提出或留言. 附件中有图片, 一看就知道.

    Ext表格获取后台数据

    在本例中,我们使用ExtJS 4.2创建了一个简单的表格控件,并使用Ext.PagingToolbar实现了分页功能。首先,我们创建了一个表格控件grid,并将其渲染到页面上,然后定义了分页工具条bbar。bbar使用Ext.PagingToolbar...

    flex 分页控件,通过事件处理

    `PagingToolbar`是Flex中用于实现分页功能的组件,通常与数据网格(如`DataGrid`或`AdvancedDataGrid`)一起使用。它提供了一组按钮和显示项,如“上一页”、“下一页”以及当前页数和总页数,帮助用户在大量数据...

    Ext grid 分页实例源码

    Ext grid PagingToolbar分页实例源码Ext grid PagingToolbar分页实例源码Ext grid PagingToolbar分页实例源码Ext grid PagingToolbar分页实例源码

    extjs前台分页插件PagingStore!

    3. **分页栏(Paging Toolbar)**:PagingStore通常与PagingToolbar组件一起使用,PagingToolbar提供了导航按钮(如“上一页”、“下一页”)和页码显示,用户可以通过交互来切换页面。 4. **数据加载和更新**:当...

    extjs 分页是碰到的问题,点击下一页事,查询条件无法传递

    在Extjs中使用`pagingtoolbar`组件进行分页操作时,通常情况下,当我们点击“下一页”,`store`会自动加载数据。但是,默认情况下`store`只传递了`start`和`limit`两个参数,这意味着如果之前进行了某种查询(例如...

    使用extremecomponent组件实现分页、导出xls

    Extremecomponents提供了分页组件,如PagingToolbar,它可以方便地与GridPanel结合使用,实现数据的分页展示。配置分页组件主要涉及设置每页显示的数据量(pageSize)以及连接后台服务获取数据的URL(url)。 接着...

    ext page实现带参数的翻页

    ext PagingToolbar 带参数的翻页

    ExtGrid使用

    4. **分页**:实现分页功能,需要配置Store的分页参数,如页面大小、总计页数等,并使用PagingToolbar组件来提供用户界面。分页可以提高大型数据集的加载效率,让用户逐页查看数据。 5. **增删改查(CRUD)操作**:...

    YUI2.8 实现datatable从server端动态获取数据,并实现分页功能(下)

    现在,为了实现分页,我们需要使用`PagingToolbar`组件,并将其附加到DataTable下方: ```javascript var pagingToolbar = new YAHOO.widget.PagingToolbar({ container: "pagingContainer", pages: 10, // 每页...

    Extjs树分页组件扩展

    "Extjs树分页组件扩展"就是为了解决这一问题而设计的,它通过扩展TreeLoader和PagingToolbar,实现了在树形组件中进行分页加载的效果。 **TreeLoader的扩展** TreeLoader是ExtJS中负责异步加载树节点的类。在原生...

    ext页面显示行数选择与主子表显示

    总的来说,"ext页面显示行数选择与主子表显示"涉及到EXT JS中GridPanel、Store、PagingToolbar的使用,以及事件监听和组件扩展等核心概念。通过熟练掌握这些知识点,开发者可以构建出更加用户友好的数据展示界面。

    ext设置分页大小.rar

    `ext-ui-combo-pagesize.js`可能实现了通过下拉框(ComboBox)让用户选择分页大小的功能,而`ext-ui-slider-pagesize.js`则可能使用滑块(Slider)组件来直观地调整每页的记录数。这些自定义实现可以增强用户的交互...

    Ext 分页核心代码

    在Grid Panel中,我们通常会使用`Ext.data.Store`来存储和管理数据,并通过配置`pagingToolbar`来实现分页界面。 2. **Ext.data.Store与分页配置** `Ext.data.Store`是数据模型的容器,负责加载、存储和管理数据。...

Global site tag (gtag.js) - Google Analytics