我正在使用ExtJS 6.2,MemoryStore with Paging并尝试从远程源检索数据。我使用MemoryStore的原因是我使用WebSocket从远程源获取数据。 假设我要显示1000条记录,并且我希望每页显示10个项目。当我想通过WebSocket的回调可视化第一页时,事情就有效了:
function (message) {
received_data = JSON.parse(message.data);
me.store.getProxy().setData(received_data.data);
me.store.loadPage(received_data.data.page);
要使其工作,我必须在代理中设置数据,而不是直接将其加载到商店中。当received_data.data.page
为1时,一切都很好。 received_data.data
包含一个类似于:
{limit: 10, page: 1, start: 0, total: 1000, items: Array(10)}
当我切换到第2页时出现问题。received_data.data
现在是:
{limit: 20, page: 2, start: 10, total: 1000, items: Array(10)}
但是网格没有显示任何内容。分页工具栏显示“无数据显示”消息,商店看起来很奇怪。我的意思是它没有数据。
store.getData()
和store.getCount()
不返回任何商品和0。
解决方法是从服务器获取所有数据,直到我想要显示的最后一个数据并显示最后一页。在第2页的情况下,我可以从服务器获取JSON:
{limit: 20, page: 2, start: 10, total: 1000, items: Array(20)}
这将按预期工作,但当然不是一个可行的解决方案,因为我不会利用分页来检索一小部分数据而不是整个数据集。
问题是,我怀疑它与Proxy的工作方式有关。即,它使用page
,start
和limit
参数计算要放入商店的实际数据。由于我不太清楚它是如何工作的,所以我很难让它按照我想要的方式行事。所以问题是:如何强制代理获取正确的分页数据集到商店?
答案 0 :(得分:0)
我挣扎了几个星期。我发布问题10分钟后,我自己找到了解决方案,pffffff。问题主要是由于启动参数。它总是必须为0所以当我想要实现存储时,我必须在loadPage方法中添加额外的参数。
me.store.loadPage(received_data.data.page, {start: 0});
这对我有用。