我正在使用 ExtJS 6.2、MemoryStore 和 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
包含如下所示的 JSON:
{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)}
这将按预期工作,但当然不是一个可行的解决方案,因为我不会利用分页来检索一小块数据而不是整个数据集。
问题是,我怀疑它与代理的工作方式有关。page
即,它使用、start
和limit
参数计算要放入存储的实际数据。由于我对它在引擎盖下的工作方式知之甚少,我很难让它按照我想要的方式运行。所以问题是:如何强制 Proxy 将正确的分页数据集发送到 Store?