`
牧羊人
  • 浏览: 215500 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PagingToolbar 扩展

阅读更多
Ext.namespace('Ext.ux.PagingToolbarEx');

Ext.ux.PagingToolbarEx = Ext.extend(Ext.PagingToolbar, {
    space : ' ',
    beforePageText : '',
    afterPageText : '',
    randomId : 0,
    formArrays : function(arys, cur_page) {

        for(var i=0; i<arys.length; i++) {
            var page_dom = null;
            if(!Ext.get('page_dom_'+this.randomId+'_'+i)) {
                page_dom = Ext.get(this.addDom({
                    tag: 'span',
                    type: 'text',
                    id: 'page_dom_'+this.randomId+'_'+i,
                    html: this.space+arys[i]+this.space
                }).el);
            } else {
                page_dom = Ext.get('page_dom_'+this.randomId+'_'+i);
            }

            if(page_dom) {
                page_dom.dom.innerHTML = (arys[i]=='')?'':(this.space+arys[i]+this.space);
                if(arys[i]!='' && arys[i]!='...' && arys[i]!=cur_page) {
                    page_dom.dom.style.cursor = 'pointer';
                    page_dom.dom.style.color = '#6294E5';
                    //page_dom.dom.style.fontWeight = 'bold';
                }
                if(arys[i] == cur_page) {
                    page_dom.dom.style.cursor = '';
                    page_dom.dom.style.color = '#000000';
                }
                page_dom.removeAllListeners();
                if(arys[i] == '...' || arys[i] == '' || arys[i]==cur_page) {
                    page_dom.on('click',function() {});
                } else if(typeof(arys[i]) == 'number') {
                    page_dom.on('click',function(e,k) {
                        var cur_page = parseInt(k.textContent || k.innerText);
                        var total = this.store.getTotalCount();
                        var pages = Math.ceil(total/this.pageSize);
                        this.doLoad((cur_page-1) * this.pageSize);
                    }, this);
                }
            }
        }
    },
    formPage : function() {
        
        //this.cursor  0,1,2...
        //var cur_page = Math.ceil((this.cursor+this.pageSize)/this.pageSize)  1,2,3...
        //this.cursor+1, this.cursor+count, this.store.getTotalCount()   11-20 of 45
        //var pages = Math.ceil(this.store.getTotalCount()/this.pageSize)  total 45 pages
        var cur_page = Math.ceil((this.cursor+this.pageSize)/this.pageSize);
        var total = this.store.getTotalCount();
        var pages = Math.ceil(total/this.pageSize);
        var arrays = [];
        if(pages <= 10) {
            for(var i=0; i<11; i++) {
                if(i<pages) arrays.push(i+1);
                else arrays.push('');
            }
        } else {
            if(cur_page <= 6) {
                for(var i=0; i<11; i++) {
                    if(i<=8) arrays.push(i+1);
                    else if(i==9) arrays.push('...');
                    else if(i==10) arrays.push(pages);
                }
            } else if(cur_page > 6 && cur_page < (pages-5)) {
                for(var i=0; i<11; i++) {
                    if(i==0) arrays.push(i+1);
                    else if(i==1 || i==9) arrays.push('...');
                    else if(i>1 && i<9) arrays.push(cur_page-(5-i));
                    else if(i==10) arrays.push(pages);
                }
            } else if(cur_page >= (pages-5)) {
                for(var i=0; i<11; i++) {
                    if(i==0) arrays.push(i+1);
                    else if(i==1) arrays.push('...');
                    else arrays.push(pages-(10-i));
                }
            }
        }

        this.formArrays(arrays, cur_page);
    },
    // private
    onRender : function(ct, position){
        this.randomId = Math.random();
        Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
        this.first = this.addButton({
            tooltip: this.firstText,
            //iconCls: "x-tbar-page-first",
            hide: true,
            text: '',
            disabled: true,
            handler: this.onClick.createDelegate(this, ["first"])
        });
        this.prev = this.addButton({
            tooltip: this.prevText,
            //iconCls: "x-tbar-page-prev",
            text: '<span style="color:#6294E5"><< Previous</span>',
            disabled: true,
            handler: this.onClick.createDelegate(this, ["prev"])
        });
        this.addSeparator();
        this.add(this.beforePageText);


        this.field = Ext.get(this.addDom({
           //tag: "input",
           //type: "text",
           //size: "3",
           //value: "1",
           //cls: "x-tbar-page-number"
           tag: "span",
           type: "text",
           html: ''
        }).el);
        
        for(var i=0; i<11; i++) {
            this.addDom({
                tag: 'span',
                type: 'text',
                id: 'page_dom_'+this.randomId+'_'+i,
                html: ''
            })
        }

        this.field.on("keydown", this.onPagingKeydown, this);
        this.field.on("focus", function(){this.dom.select();});
        this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
        this.field.setHeight(18);
        this.addSeparator();
        this.next = this.addButton({
            tooltip: this.nextText,
            //iconCls: "x-tbar-page-next",
            text: '<span style="color:#6294E5">Next >></span>',
            style: 'color:#77AAFF',
            disabled: true,
            handler: this.onClick.createDelegate(this, ["next"])
        });
        this.last = this.addButton({
            tooltip: this.lastText,
            //iconCls: "x-tbar-page-last",
            hide: true,
            text: '',
            disabled: true,
            handler: this.onClick.createDelegate(this, ["last"])
        });
        this.addSeparator();
        this.loading = this.addButton({
            tooltip: this.refreshText,
            iconCls: "x-tbar-loading",
            handler: this.onClick.createDelegate(this, ["refresh"])
        });

        if(this.displayInfo){
            this.displayEl = Ext.fly(this.el.dom).createChild({cls:'x-paging-info'});
        }
        if(this.dsLoaded){
            this.onLoad.apply(this, this.dsLoaded);
        }
    },
    // private
    onLoad : function(store, r, o){
        if(!this.rendered){
            this.dsLoaded = [store, r, o];
            return;
        }
       this.cursor = o.params ? o.params[this.paramNames.start] : 0;
       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);
       this.prev.setDisabled(ap == 1);
       this.next.setDisabled(ap == ps);
       this.last.setDisabled(ap == ps);
       this.loading.enable();
       this.updateInfo();
       this.formPage();
    }
});

Ext.reg('pagingtoolbarex', Ext.ux.PagingToolbarEx);
  • 大小: 24.3 KB
分享到:
评论

相关推荐

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

    为了解决这个问题,我们需要扩展PagingToolbar的功能,使它能够携带更多的查询参数。 首先,我们需要在PagingToolbar的配置中添加自定义参数。这可以通过监听`beforechange`事件来实现。`beforechange`事件在...

    Ext JS PagingToolbar 组件

    PageResizer扩展了PagingToolbar的功能,允许用户在运行时动态调整每页显示的记录数。这种特性提供了更灵活的用户体验,用户可以根据自己的偏好选择适合的数据显示密度。 PageResizer组件通常通过在PagingToolbar中...

    EXTJS3 Ext.PagingToolbar() 快捷键应用

    快捷键的应用不仅限于`PAGE_UP`和`PAGE_DOWN`键,还可以扩展到其他键,比如`Home`键跳转到第一页,`End`键跳转到最后一页,或者`Enter`键执行当前页码输入框中的页码。这需要根据实际需求和用户习惯来设计。 同时,...

    Extjs树分页组件扩展

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

    Ext扩展控件-------可以通过下拉列表框选择每页的分页条数

    "Ext扩展控件-------可以通过下拉列表框选择每页的分页条数"就是为了解决这个问题而设计的。 这个扩展控件提供了下拉列表选项,用户可以根据需要选择每页显示的记录条数。这样,用户不再局限于预设的几个选项,可以...

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

    `PagingToolbarX.JS`文件可能扩展了默认的PagingToolbar,增加了自定义的每页行数选择功能。EXT JS允许我们通过配置`store`的`pageSize`属性来设置每页显示的记录数。在这个文件中,可能会定义一个新的组件或扩展,...

    extjs 分页

    六、扩展性与优化 EXTJS的分页系统可以与缓存策略结合,提高用户体验。例如,预加载临近页的数据,使得用户在翻页时感觉更流畅。此外,还可以根据网络状况动态调整每页的记录数,以平衡数据加载速度和用户体验。 ...

    动画效果的grid分页

    3. **动画效果**:要实现动画效果,我们需要扩展(extend)默认的PagingToolbar和GridView。例如,`ExtendPagingToolbar.js`和`ExtendGridView.js`可能就是实现了自定义动画逻辑的扩展文件。在这些文件中,可以通过...

    pagingstore

    PagingStore通常会与PagingToolbar结合使用,PagingToolbar是一个工具栏,显示分页导航控件,如页码和跳转按钮。 在PagingStore中,关键的概念包括: 1. **TotalProperty**:总记录数,用于告知PagingStore数据集...

    EXT.NET1.0带自定义页大小的分页

    EXT.NET 是一个基于.NET Framework的开源JavaScript库,它扩展了Ext JS的功能,为.NET开发者提供了丰富的Web UI组件和服务器端支持。在这个“EXT.NET1.0带自定义页大小的分页”示例中,我们将深入探讨EXT.NET如何...

    EXTJS Grid总结例子

    通过本总结例子中的源代码,读者可以更直观地学习EXTJS Grid的用法,掌握其核心功能,并结合实际项目需求进行扩展和优化。对于EXTJS初学者来说,这是一个很好的实践平台,而对于有经验的开发者,这则是一份有价值的...

    Extjs 4.0 MVC分页实例

    ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。在这个MVC(Model-View-Controller)分页实例中,我们将探讨如何...这样的设计使得代码更易于维护和扩展,同时也提高了应用的可读性和复用性。

    Extjs2分页树 带查询功能

    在树形组件中,虽然没有内置的分页支持,但我们可以通过自定义扩展来实现类似的功能。 要实现分页树,我们需要做以下几步: 1. **数据模型**:创建一个数据模型(Ext.data.Model),定义树节点的数据结构,包括...

    ExtJs GridPanel 操作

    xtype: 'pagingtoolbar', store: store, // 关联到store displayInfo: true // 显示当前页信息 }] ``` 总之,ExtJS GridPanel是一个强大且灵活的数据展示工具,通过各种配置选项和扩展机制,可以适应各种复杂的...

    ExtJS教程(深入介绍)

    - **基本组件**:如BoxComponent、Button、ColorPalette、DatePicker、Editor、GridPanel、PagingToolbar、Panel、ProgressBar、SplitButton、TabPanel、TreePanel、Viewport和Window等,它们是构建界面的基本单元。...

    EXTJS实用开发指南_个人整理笔记.pdf

    1. 基本控件:Box、Button、ColorPalette、Component、Container、CycleButton、DataView、DatePicker、Editor、EditorGridPanel、Grid、PagingToolbar、Panel、ProgressBar、SplitButton、TabPanel、TreePanel、...

    extmaxdate3.rar_ext_大数据

    6. **Ext.maxdate**:这个可能是自定义的扩展或配置,用于处理日期相关的最大值。在大数据场景下,可能涉及到日期范围筛选或日期排序,`Ext.maxdate`可能用于限制日期选择的范围。 通过上述知识点,我们可以构建一...

    用EXTJS写一个仪表盘的图形.pdf

    5. **PagingToolbar.js**:EXTJS中的分页工具栏组件,用于处理大量数据的分页显示。 6. **tools.js** 和 **ClearButton.js**:可能是自定义的工具函数和清除按钮组件。 7. **echarts.js**:百度开发的ECharts库,是...

    ext grid 显示数据

    4. **分页(Paging)**: 当数据量大时,Grid支持分页显示,通过`pagingToolbar`和`remoteSort`配置实现。分页栏提供导航按钮和信息显示,帮助用户在大量数据中浏览。 5. **排序(Sorting)**: Grid的每列都可进行...

    EXT_JS实用开发指南_个人整理笔记

    - **表单及元素组件**:Editor、EditorGridPanel、GridPanel、PagingToolbar、Panel、ProgressBar、SplitButton、TabPanel、TreePanel和Window等。 6. **组件的使用**: 创建组件时,需要指定其配置参数,如尺寸...

Global site tag (gtag.js) - Google Analytics