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

ExtJS 分页扩展

阅读更多

最近工作项目需要,我也来扩展一下 ExtJs 分页.网上有很多..但没有找到项目要求的.

/**
 * @author LDJ
 * @date 2010-10-14 本分页组件提供 两个用户可以配置属性
 * @config everyPageCount 显示分页连接个数 默认为 11
 * @config everyPageSizeData 每页大小设置 为一个数组. 如 : [['5', 5], ['10', 10]]
 *
 * @type
 */
Ext.namespace('Ext.ux.grid')
Ext.ux.grid.PagingToolbarExp = function(config) {
 var config = config || {};
 this.everyPageCount = config.everyPageCount || 7;
 this.everyPageSizeData = [ ['5', 5], ['10', 10], ['20', 20],
   ['50', 50], ['100', 100]];
 if (config.everyPageSizeData) {
  Ext.apply(this.everyPageSizeData, config.everyPageSizeData);
 }
 Ext.ux.grid.PagingToolbarExp.superclass.constructor.call(this, config);
 this.initAction();
}

var T = Ext.Toolbar;
Ext.extend(Ext.ux.grid.PagingToolbarExp, Ext.PagingToolbar, {
 displayMsg : "显示 第 【{0}】 条到 【{1}】 条记录,一共 【{2}】 条",
 emptyMsg : "没有记录",
 beforePageText : '页码',
 afterPageText : '总页数【{0}】',
 firstText : '首页',
 prevText : '上一页',
 nextText : '下一页',
 lastText : '末页',
 refreshText : '刷新',
 initAction : function() {

 },
 initComponent : function() {
  var pagingItems = [this.first = new T.Button({
       tooltip : this.firstText,
       overflowText : this.firstText,
       iconCls : 'x-tbar-page-first',
       disabled : true,
       handler : this.moveFirst,
       scope : this
      }), this.prev = new T.Button({
       tooltip : this.prevText,
       overflowText : this.prevText,
       iconCls : 'x-tbar-page-prev',
       disabled : true,
       handler : this.movePrevious,
       scope : this
      }), '-', this.beforePageText,
    this.inputItem = new Ext.form.NumberField({
       cls : 'x-tbar-page-number',
       allowDecimals : false,
       allowNegative : false,
       enableKeyEvents : true,
       selectOnFocus : true,
       submitValue : false,
       listeners : {
        scope : this,
        keydown : this.onPagingKeyDown,
        blur : this.onPagingBlur
       }
      }), '-',
    '每页 ', this.pageSizeCombox = new Ext.form.ComboBox({
       store : new Ext.data.SimpleStore({
          fields : ['text', 'value'],
          data : this.everyPageSizeData
         }),
       mode : 'local',
       displayField : 'text',
       valueField : 'value',
       editable : false,
       scope : this,
       allowBlank : false,
       triggerAction : 'all',
       value : this.pageSize,
       listWidth : 45,
       width : 45,
       listeners : {
        scope : this,
        select : this.gotoSelectPage

       }
      }), ' 条', this.afterTextItem = new T.TextItem({
       text : String.format(this.afterPageText, 1)
      }), '-', this.next = new T.Button({
       tooltip : this.nextText,
       overflowText : this.nextText,
       iconCls : 'x-tbar-page-next',
       disabled : true,
       handler : this.moveNext,
       scope : this
      }), this.last = new T.Button({
       tooltip : this.lastText,
       overflowText : this.lastText,
       iconCls : 'x-tbar-page-last',
       disabled : true,
       handler : this.moveLast,
       scope : this
      }), '-', this.refresh = new T.Button({
       tooltip : this.refreshText,
       overflowText : this.refreshText,
       iconCls : 'x-tbar-loading',
       handler : this.doRefresh,
       scope : this
      }), '-', this.panelMe = new Ext.Panel({
       id : 'pageBarItems',
       html : this.pageSpliter()

      })];

  var userItems = this.items || this.buttons || [];
  if (this.prependButtons) {
   this.items = userItems.concat(pagingItems);
  } else {
   this.items = pagingItems.concat(userItems);
  }
  delete this.buttons;
  if (this.displayInfo) {
   this.items.push('->');
   this.items.push(this.displayItem = new T.TextItem({}));
  }
  Ext.PagingToolbar.superclass.initComponent.call(this);
  this.addEvents('change', 'beforechange');
  this.on('afterlayout', this.onFirstLayout, this, {
     single : true
    });
  this.cursor = 0;
  this.bindStore(this.store, true);
 },
 onLoad : function(store, r, o) {
  if (!this.rendered) {
   this.dsLoaded = [store, r, o];
   return;
  }
  var p = this.getParams();
  this.cursor = (o.params && o.params[p.start]) ? o.params[p.start] : 0;
  var d = this.getPageData(), ap = d.activePage, ps = d.pages;
  this.afterTextItem.setText(String.format(this.afterPageText, d.pages));

  Ext.getCmp('pageBarItems').getEl().dom.innerHTML = this.pageSpliter(
    d.activePage, d.pages);

  this.inputItem.setValue(ap);
  this.first.setDisabled(ap == 1);
  this.prev.setDisabled(ap == 1);
  this.next.setDisabled(ap == ps);
  this.last.setDisabled(ap == ps);
  this.refresh.enable();

  this.updateInfo();
  this.fireEvent('change', this, d);
 },
 /**
  *
  * @param {}
  *            activePage 当前去向多少页
  * @param {}
  *            totalPage 总页数
  * @return {}
  */
 pageSpliter : function(activePage, totalPage) {
  var p = [];
  var flag = false;
  var halfFlag = false;
  var mybarId = this.getId();
  var firstStart = 1;
  var lastEnd = this.everyPageCount;

  p.push('       第: 【');
  var start;
  var limit;

  if (this.everyPageCount % 2 == 0) {

   this.halfMidile = parseInt((this.everyPageCount) / 2); // 中间数的一半
   start = activePage - this.halfMidile;
   if (start <= 0) {
    start = 1;
   }
   limit = activePage + this.halfMidile;
   if (limit <= this.everyPageCount) {
    limit = this.everyPageCount + 1;
   }
   if (limit > totalPage) {
    limit = totalPage + 1;
   }

  } else {

   this.halfMidile = parseInt((this.everyPageCount + 1) / 2); // 中间数的一半
   // 3
   start = activePage - this.halfMidile + 1;
   if (start <= 0) {
    start = 1;
   }

   limit = activePage + this.halfMidile;
   if (limit <= this.everyPageCount) {
    limit = this.everyPageCount + 1;
   }

   if (limit > totalPage) {
    limit = totalPage + 1;
   }

  }
  for (var i = start; i < limit; i++) {
   flag = true;
   p.push("<a href='javascript:void(0)' class='x-btn-over' style='padding-top:1px;padding-left:2px;padding-bottom:10px;font-weight: bold;font-size : 12px;'  onclick=Ext.getCmp('"
       + mybarId
       + "').gotoPage(this.innerHTML) >  "
       + i
       + "  </a>");
  }

  p.push(' 】页');

  if (flag) {
   return p.join('');
  } else {
   return '';
  }

 },
 gotoSelectPage : function() {

  this.pageSize = this.pageSizeCombox.getValue();
  this.inputItem.setValue(1);// 重新设置页码
  var pageToNum = this.inputItem.getValue();
  this.doLoad((Ext.util.Format.trim(pageToNum) - 1) * this.pageSize);
  this.inputItem.setValue(Ext.util.Format.trim(pageToNum));
 },
 gotoPage : function(pageToNum) {
  this.doLoad((Ext.util.Format.trim(pageToNum) - 1) * this.pageSize);

  this.inputItem.setValue(Ext.util.Format.trim(pageToNum));
 }

});
Ext.reg('pagingtoolbarexp',Ext.ux.grid.PagingToolbarExp);

  • 大小: 5.1 KB
分享到:
评论
2 楼 javaOpen 2011-07-18  

taoge2121 写道
怎么使用啊?

跟使用 ExtJS 分页组件 PagingToolbar 一样
new PagingToolbarExp ({
everyPageCount : 5
})
1 楼 taoge2121 2011-07-18  
怎么使用啊?

相关推荐

    Extjs树分页组件扩展

    实现对Ext树进行分页的组件,扩展了TreeLaoder和PagingToobar

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

    可以通过下拉列表框选择每页的分页条数 主要用于动态选择分页表格每页显示记录的条数

    extjs扩展工具条带选择页数的配置

    扩展ext的分页工具条 带选择页数的配置 采用Ext4.2

    ExtJS(ajax框架) 4.2.1

    从ExtJS 4开始,框架不再扩展数组或函数等原生对象,因此,与其它的框架同时加载到页面时,再也不会产生冲突。 应用架构:在ExtJS 4,引入了一个标准化的几乎适合任何ExtJS应用程序的MVC风格的应用架构。使用MVC,...

    轻松搞定Extjs_原创

    第二十二章:GridPanel扩展 158 一、学会自学吧,朋友 158 二、带摘要的GridPanel 158 三、RowExpander 162 四、分组GridPanel 165 五、将带摘要的GridPanel和分组GridPanel合二为一 168 六、小结 171 第二十三章:...

    精通JS脚本之ExtJS框架.part2.rar

    14.2 与ExtJS扩展相关的预备知识 14.2.1 定义命名空间 14.2.2 使用xtype 14.3 用户扩展和插件 14.3.1 编写自定义用户扩展 14.3.2 常用插件UploadDialog 14.3.3 常用插件ManagedIFrame 14.4 使用ExtJS制作...

    精通JS脚本之ExtJS框架.part1.rar

    14.2 与ExtJS扩展相关的预备知识 14.2.1 定义命名空间 14.2.2 使用xtype 14.3 用户扩展和插件 14.3.1 编写自定义用户扩展 14.3.2 常用插件UploadDialog 14.3.3 常用插件ManagedIFrame 14.4 使用ExtJS制作...

    ExtJs4_笔记.docx

    第二章 ExtJs对js基本语法扩展支持 16 一、动态引用加载 16 二、对类的封装 17 三、基本数据类型 19 四、函数执行时间控制 20 五、键盘事件侦听 21 第三章 Ext.Ajax 对ajax的支持 23 一、ExtJs中的Ajax:Ext.Ajax....

    jq-extgrid v1.2 表格插件

    extgrid 是一款jquery上的gird插件 界面风格采用了类似easyui extjs 界面风格样式 可通过css修改自己想要的样式 ...extgrid具有列大小 位置改变 排序 分组 分页 工具栏 扩展行 rowNumber 多选列 编辑列 行列 [更多]

    ssh+ExtJs制作企业信息管理平台

    myGrid支持很多操作功能,比如导入导出数据,右键,过滤,搜索,分页数选择等等,myForm支持 单列跟双列两种模式,支持下拉分页,fckeditor,文件上传等控件,具体大家可以根据myForm自己去扩展自己的控件

    产品经理Axure元件库.zip

    laxureRP8扩展元件库V1.2读者版.rpliblaxuresVG矢量图标元件库V1.21版.rplibIcons_Audio.rplib icon-UX People.rplib iOS iPad线框。rplib iOS7-Base-UI。rplib iOS7-Like-con-Set.rplib ioS8 UI 工具包. rplib ipad...

    非常好的gwt-ext培训教程

    它扩展了 GWT,在 ExtJs 的基础上实现了有排序功能的表格(Grid)、分页、过滤,支持有拖拽功能的树,高度可定制的组合下拉框(Combobox)、目录、对话框、表单(Form)以及功能丰富、强大且易用的 API。 GWT-Ext ...

    ext-2.2.zip

    2、GMapPanel GMap扩展 体验例子见:http://extjs.com/deploy/dev/examples/window/gmap.html 3、XmlTreeLoader XML转换成Tree http://extjs.com/deploy/dev/examples/tree/xml-tree-loader.html 4、强大...

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

    主子表联动时子表需要获取主表的ID,在分页时需要提供ID,扩展EXT实现之,提供选择页面显示行数。

    EfsFrame(java开发框架) v2.2 源代码.rar

    c)修正分页列表中下面分页条中 分页那里直接输入数字,回车不跳页的问题; d)修改 一个form中同时存在两个datetime的input时,第二个不能选择时分的bug; e)增加 input的 kind与datatype的自动对应关系默认对应...

    EfsFrame(net开发框架) v2.2 源代码.rar

    c)修正分页列表中下面分页条中 分页那里直接输入数字,回车不跳页的问题; d)修改 一个form中同时存在两个datetime的input时,第二个不能选择时分的bug; e)增加 input的 kind与datatype的自动对应关系默认对应...

    EfsFrame(php开发框架) 2.2.rar

    c)修正分页列表中下面分页条中 分页那里直接输入数字,回车不跳页的问题; d)修改 一个form中同时存在两个datetime的input时,第二个不能选择时分的bug; e)增加 input的 kind与datatype的自动对应关系默认对应...

    EfsFrame(php开发框架) v2.2 源代码.rar

    c)修正分页列表中下面分页条中 分页那里直接输入数字,回车不跳页的问题; d)修改 一个form中同时存在两个datetime的input时,第二个不能选择时分的bug; e)增加 input的 kind与datatype的自动对应关系默认对应...

    Ext Js权威指南(.zip.001

    6.1.7 扩展选择器 / 248 6.1.8 ext.domquery的使用方法 / 249 6.1.9 ext js选择器的总结 / 252 6.2 获取单一元素:ext.dom.element / 252 6.2.1 从错误开始 / 252 6.2.2 使用ext.get获取元素 / 253 6.2.3 ...

    etmvc:一个简易高效的web开发框架

    etmvc 一个简易高效的web开发框架 etmvc是基于Java技术,为WEB开发提供的一套简易MVC框架。 简易但不简单,其设计和实现借鉴业界众多的优秀框架,如struts,...etmvc和extjs结合分页例子 etmvc的过滤器基础 ActiveRecord

Global site tag (gtag.js) - Google Analytics