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