两年没有在这个技术博客上写东西了,说是工作忙吧,其实也不是忙到连写写文章的时间也没有,归根到底还是太懒了。希望今年能够勤奋点,每周坚持写一篇,形成一个好习惯。以前最后一篇写的是FLEX下的分页控件,最近UI层在用Ext,发现Ext.PagingToolbar运行时不能设置每页条数的功能,于是打算自己做一个插件来完成这一工作。
按照国际惯例,先上一个效果图:
效果图1
效果图2
设计思路
1.将一个可以设置每页条数的控件放到PagingToolbar里面去,当改变了每页显示条数时,通知PagingToolbar重新取数据显示;当PagingToolbar中的每页显示条数发生变化时(可能由其它的分页插件引起),更新显示自身数据(每页显示条数)。
2.可以设置每页条数的控件,一般有以下几种,下拉框,滑块控件,文本框等,本文实现了下拉框(支持填写数字),滑块。
3. 设置每页条数的控件可以加到PagingToolbar中的任意位置,如图
代码说明:
1.编写Ext中的插件,Javascript代码格式如下:
10})
2.将插件加到指定的位置,如上面的图所画,在实际中使用pagingToolbar.insert(index, control)便可以达到目的,这里还有一个方法pagingToolbar.add(control)是直接将控件加到pagingToolbar的最后(如上图黑线所示),这样的话,我们可以为插件定义一个属性
index: 0, //在items中的位置
3.当取到用户设定的每页条数时,这时通知pagingToolbar,主要工作是设置pagingToolbar.pageSize,然后重新计算出start,分页请求取数据的开始数据序号
14 pagingToolbar.doLoad(Math.floor(rowIndex / pagingToolbar.pageSize) * pagingToolbar.pageSize);
注意:
在某种特定情况下,pagingToolbar.cursor会出现不存在的情况(在测试中发现在comobox中手动输入一个数字会出现这种情况),所以用rowIndex比较保险,假如只是让用户选择显示条数,代码只用
pagingToolbar.doLoad(Math.floor(pagingToolbar.cursor/ pagingToolbar.pageSize) * pagingToolbar.pageSize)就可以解决了。
4,当插件发现 pagingToolbar的每页显示数发生变化,对自身的显示信息进行更新,方法是注册侦听pagingToolbar中的change
下拉框插件的完整代码:
滑块插件的完整代码:
代码下载:/Files/badwps/ExtPagingExample.rar (Extjs文件夹中的Ext库文件删了,自己手动加回去吧,基于ext3.3)