extjs localFilter联合grid分页条使用时遇到的一个问题
2013-04-23 11:22
357 查看
今天,我们在使用extjs时候遇到了一个问题:
问题再现:
根据客户的需求,我们需要在portlet首部做一个分页的grid,当然了,下面有一个分页条,然后我们需要当点击分页条的时候,会像服务器端发一个ajax请求来获取当前页的所有记录。然后我们在顶部点Filter组合框时候要基于这个局部的结果集做过滤。我们分页条是很正确和完美的,比如一共有400多条记录,分在21页中,每页显示20条记录,然后我们的过滤条件选择的是Status字段为“Submitted & Pending for Approval的条件”,在第一页时候,一切正常,第二页的时候,因为第二页的局部结果集(20条记录)通过过滤条件之后筛选下来的结果条数为0 ,结果它吧整个下方的分页条都冻结了。如下图所示:
原因分析:
为了找到原因为什么分页条被冻结,我们就必须找到这段执行代码, 很显然,无论是点击“左","右”或者“刷新” 箭头,都会去触发onload方法:
如果是正常的情况,就是过滤之后store不为空的话,那么第10行isEmpty会返回false,于是会执行第11-20行,所以一切会正常显示的,但是如果过滤子结果集之后为空的话,那么第10行isEmpty会返回true,所以会执行第16-19行,吧这些相关的数字重置,然后接着执行第22行,这里会吧 afterTextItem的文本设为刚才在15行的 "of 0",然后在第23行,会吧输入框中的值设为0(因为第17行) ,然后把这个输入框给禁用掉,因为isEmpty为true,所以setDisabled(true),这就是为什么我们会出现整个BBar被禁用的情况。
解决方法:
只要重写下change 方法就可以了
问题再现:
根据客户的需求,我们需要在portlet首部做一个分页的grid,当然了,下面有一个分页条,然后我们需要当点击分页条的时候,会像服务器端发一个ajax请求来获取当前页的所有记录。然后我们在顶部点Filter组合框时候要基于这个局部的结果集做过滤。我们分页条是很正确和完美的,比如一共有400多条记录,分在21页中,每页显示20条记录,然后我们的过滤条件选择的是Status字段为“Submitted & Pending for Approval的条件”,在第一页时候,一切正常,第二页的时候,因为第二页的局部结果集(20条记录)通过过滤条件之后筛选下来的结果条数为0 ,结果它吧整个下方的分页条都冻结了。如下图所示:
原因分析:
为了找到原因为什么分页条被冻结,我们就必须找到这段执行代码, 很显然,无论是点击“左","右”或者“刷新” 箭头,都会去触发onload方法:
onLoad : function(){ var me = this, pageData, currPage, pageCount, afterText, count, isEmpty; count = me.store.getCount(); isEmpty = count === 0; if (!isEmpty) { pageData = me.getPageData(); currPage = pageData.currentPage; pageCount = pageData.pageCount; afterText = Ext.String.format(me.afterPageText, isNaN(pageCount) ? 1 : pageCount); } else { currPage = 0; pageCount = 0; afterText = Ext.String.format(me.afterPageText, 0); } Ext.suspendLayouts(); me.child('#afterTextItem').setText(afterText); me.child('#inputItem').setDisabled(isEmpty).setValue(currPage); me.child('#first').setDisabled(currPage === 1 || isEmpty); me.child('#prev').setDisabled(currPage === 1 || isEmpty); me.child('#next').setDisabled(currPage === pageCount || isEmpty); me.child('#last').setDisabled(currPage === pageCount || isEmpty); me.child('#refresh').enable(); me.updateInfo(); Ext.resumeLayouts(true); if (me.rendered) { me.fireEvent('change', me, pageData); } },
如果是正常的情况,就是过滤之后store不为空的话,那么第10行isEmpty会返回false,于是会执行第11-20行,所以一切会正常显示的,但是如果过滤子结果集之后为空的话,那么第10行isEmpty会返回true,所以会执行第16-19行,吧这些相关的数字重置,然后接着执行第22行,这里会吧 afterTextItem的文本设为刚才在15行的 "of 0",然后在第23行,会吧输入框中的值设为0(因为第17行) ,然后把这个输入框给禁用掉,因为isEmpty为true,所以setDisabled(true),这就是为什么我们会出现整个BBar被禁用的情况。
解决方法:
只要重写下change 方法就可以了
相关文章推荐
- 在tp3.2.3中使用 FormData 对象实现表单的文件上传功能遇到的一个问题及解决方法
- OpenGL中使用glew库进行GLSL编程遇到的一个问题
- Struts2中使用json遇到的一个小问题
- 使用 TestNG 创建一个数据驱动测试过程中遇到的问题
- 今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
- 使用wordpress时遇到的一个奇怪的问题:把页面设置为首页之后分页失效
- 使用Android studio转换Jar包时,遇到的一个问题Could not find tools.jar.
- 使用Struts2+OGNL开发网络应用程序中遇到的一个官方问题
- 使用Oracle sys_guid()生成的ID更新列值时遇到的一个问题
- 使用MFC自绘菜单时遇到一个问题
- android theme主题使用遇到的一个小问题
- 使用Servlet3.0的异步支持时我遇到的一个问题
- 使用Ant自动打包项目遇到的一个问题,备案!
- 今天使用VS2015遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
- 使用session时候,遇到的一个问题(请求解决方法)
- 在使用WINSOCK2.H头文件时遇到的一个奇怪问题
- CentOS7 使用 yum 安装 mysql 遇到的一个问题
- 使用spymemcached spring整合的时候遇到的一个配置问题
- myeclipse中使用debug时遇到的一个小问题
- 使用sourceTree遇到的一个问题