Extjs6中BufferedStore组件

来源:互联网 发布:数据安全管理方法 编辑:程序博客网 时间:2024/06/06 08:54

在使用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);                }            }        }    }});



0 0