Extjs6中BufferedStore组件
2016-05-03 16:47
316 查看
在使用BufferedStore做滚动条加载的时候如果数据变动频繁,就会出现加载问题。
出现情况步骤:
1、滚动条拖动到末尾,等待加载完成。
2、拖动到中间位置,改变数据量。比如6000条数据改变为6010。
3、在拖动到末尾,就会出现问题,grid一直存在遮罩效果,正在加载。
当加载最后一页的时候执行了me.fireEvent('cachemiss', me, start, end);//出现正在加载中,
如果要消除遮罩效果需要执行 me.fireEvent('cachefilled', me, start, end);
需要执行监听pageadd触发pageAddHandler方法。
跟踪发现prefetchRange方法中me.pageCached(page)最后一页结果是加载完成的,所以不会触发pageadd事件,所以加入 page == endPage,最后一页重新加载一次数据。
解决办法:
重写BufferedStore
代码:
出现情况步骤:
1、滚动条拖动到末尾,等待加载完成。
2、拖动到中间位置,改变数据量。比如6000条数据改变为6010。
3、在拖动到末尾,就会出现问题,grid一直存在遮罩效果,正在加载。
当加载最后一页的时候执行了me.fireEvent('cachemiss', me, start, end);//出现正在加载中,
如果要消除遮罩效果需要执行 me.fireEvent('cachefilled', me, start, end);
需要执行监听pageadd触发pageAddHandler方法。
跟踪发现prefetchRange方法中me.pageCached(page)最后一页结果是加载完成的,所以不会触发pageadd事件,所以加入 page == endPage,最后一页重新加载一次数据。
解决办法:
重写BufferedStore
代码:
Ext.define('expand.overrides.data.BufferedStore', { override :'Ext.data.BufferedStore', prefetchRange: function(start, end) { var me = this, startPage, endPage, page, data = me.getData(); if (!me.rangeCached(start, end)) { startPage = me.getPageFromRecordIndex(start); endPage = me.getPageFromRecordIndex(end); data.setMaxSize(me.calculatePageCacheSize(end - start + 1)); for (page = startPage; page <= endPage; page++) { if (!me.pageCached(page) || page == endPage) { me.prefetchPage(page); } } } } });
相关文章推荐
- jQuery中队列queue()函数的实例教程
- Angularjs 基于$timeout延时加载js
- HTML——6(表格)
- HTML/JSP实现跳转到页面指定位置
- JS刷新页面方法
- AJax的使用json数据的传输回调函数
- html5引用公共头尾
- nodejs php go语言了解
- CSS3实现曲线阴影和翘边阴影
- JSP页面中取得绝对路径
- 前端知识体系
- JavaScript中split与join函数的进阶使用技巧
- jquery字符串转日期类型
- Angularjs基础(十一)
- 不登录浏览某些论坛的全文
- fastjson 序列化枚举问题
- interesting js
- js判断浏览器类型及版本号
- 从此不求人:自主研发一套PHP前端开发框架(29)
- bootstrap 模态框 遮住了 ueditor 编辑器的表情框