extjs localFilter联合grid分页条使用时遇到的一个问题

简介:

 今天,我们在使用extjs时候遇到了一个问题:

问题再现:

根据客户的需求,我们需要在portlet首部做一个分页的grid,当然了,下面有一个分页条,然后我们需要当点击分页条的时候,会像服务器端发一个ajax请求来获取当前页的所有记录。然后我们在顶部点Filter组合框时候要基于这个局部的结果集做过滤。我们分页条是很正确和完美的,比如一共有400多条记录,分在21页中,每页显示20条记录,然后我们的过滤条件选择的是Status字段为“Submitted & Pending for Approval的条件”,在第一页时候,一切正常,第二页的时候,因为第二页的局部结果集(20条记录)通过过滤条件之后筛选下来的结果条数为0 ,结果它吧整个下方的分页条都冻结了。如下图所示:

 

 

原因分析:

为了找到原因为什么分页条被冻结,我们就必须找到这段执行代码, 很显然,无论是点击“左","右”或者“刷新” 箭头,都会去触发onload方法:

 


  
  
  1. onLoad : function(){  
  2. var me = this,  
  3. pageData,  
  4. currPage,  
  5. pageCount,  
  6. afterText,  
  7. count,  
  8. isEmpty;  
  9. count = me.store.getCount();  
  10. isEmpty = count === 0;  
  11. if (!isEmpty) {  
  12. pageData = me.getPageData();  
  13. currPage = pageData.currentPage;  
  14. pageCount = pageData.pageCount;  
  15. afterText = Ext.String.format(me.afterPageText, isNaN(pageCount) ? 1 : pageCount);  
  16. else {  
  17. currPage = 0;  
  18. pageCount = 0;  
  19. afterText = Ext.String.format(me.afterPageText, 0);  
  20. }  
  21. Ext.suspendLayouts();  
  22. me.child('#afterTextItem').setText(afterText);  
  23. me.child('#inputItem').setDisabled(isEmpty).setValue(currPage);  
  24. me.child('#first').setDisabled(currPage === 1 || isEmpty);  
  25. me.child('#prev').setDisabled(currPage === 1 || isEmpty);  
  26. me.child('#next').setDisabled(currPage === pageCount || isEmpty);  
  27. me.child('#last').setDisabled(currPage === pageCount || isEmpty);  
  28. me.child('#refresh').enable();  
  29. me.updateInfo();  
  30. Ext.resumeLayouts(true);  
  31. if (me.rendered) {  
  32. me.fireEvent('change', me, pageData);  
  33. }  
  34. },  

 

如果是正常的情况,就是过滤之后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 方法就可以了





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1184200,如需转载请自行联系原作者
目录
相关文章
|
Arthas 算法 Java
这5个GitHub项目+3个网站,助你一飞冲天!
这5个GitHub项目+3个网站,助你一飞冲天! 小伙伴们周末好呀,这次来更新一波学习资源啦~ 👍 之前推荐过一些书,这次我们就来看看 4ye 平时常关顾的一些学习网站叭!😋 (同时会更新在菜单栏的 宝藏资源 中,方便查找) 资源一览 image-20210807235820378 CyC2018 / CS-Notes 高达 136K star 的项目! 😄 📚 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计 概览图 地址👉 github.com/CyC2018/CS-… ima
1028 0
STM32使用HAL库实现modbus的简单通讯
STM32使用HAL库实现modbus的简单通讯
460 0
three.js实现球体
使用three实现一个球体
617 2
three.js实现球体
|
前端开发 Java 关系型数据库
JavaWeb用户登录注册实例(mybatis、maven、mysql、tomcat、servlet)
JavaWeb用户登录注册实例(mybatis、maven、mysql、tomcat、servlet)
JavaWeb用户登录注册实例(mybatis、maven、mysql、tomcat、servlet)
|
弹性计算
阿里云服务器带宽价格:包括固定带宽费用和流量收费明细表
按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费,如果带宽实际利用率较高的话,按固定带宽计费更划算一些。
1826 0
阿里云服务器带宽价格:包括固定带宽费用和流量收费明细表
方法:号码如何批量导入苹果手机通讯录?
操作一:在电脑上打开软件,金芝号码提取导入助手。然后你把你的号码复制过来,放进软件的“导入通讯录”功能。操作二:选择“生成通讯录”,会得到一个文件,你把文件存放到电脑桌面。操作三:最后你再把电脑桌面上的文件,通过电脑上的薇xin或电脑Q,发送给你的手机徽信或者手机扣扣,在苹果手机上打开它,即可把号码批量导入苹果手机通讯录。
方法:号码如何批量导入苹果手机通讯录?
【QT】QT Designer控件随窗口大小自适应
【QT】QT Designer控件随窗口大小自适应
1407 0
|
存储 测试技术 数据库
python+pytest接口自动化(13)-token关联登录
在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示需要先登录。 这其实就是状态或会话保持的第三种方式token。
python+pytest接口自动化(13)-token关联登录
|
存储 安全 编译器
CPU和寄存器详解
CPU和寄存器详解
1155 0
CPU和寄存器详解
|
新零售 人工智能 供应链
大咖说|试衣到家 CEO:我们卖的不是衣服,是服务
一千个人心中就有一千个时尚界的哈姆雷特,随着时代发展,消费者对时尚的理解和鉴赏能力正逐步提升,对时尚的态度也越来越个性化,更注重体验感与尊贵感。
418 0
大咖说|试衣到家 CEO:我们卖的不是衣服,是服务