ExtJS 6.2在使用Paging与MemoryStore时理解loadPage

时间:2017-10-12 08:43:20

标签: extjs websocket extjs6.2

我正在使用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包含一个类似于:

的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)}

这将按预期工作,但当然不是一个可行的解决方案,因为我不会利用分页来检索一小部分数据而不是整个数据集。

问题是,我怀疑它与Proxy的工作方式有关。即,它使用pagestartlimit参数计算要放入商店的实际数据。由于我不太清楚它是如何工作的,所以我很难让它按照我想要的方式行事。所以问题是:如何强制代理获取正确的分页数据集到商店?

1 个答案:

答案 0 :(得分:0)

我挣扎了几个星期。我发布问题10分钟后,我自己找到了解决方案,pffffff。问题主要是由于启动参数。它总是必须为0所以当我想要实现存储时,我必须在loadPage方法中添加额外的参数。

me.store.loadPage(received_data.data.page, {start: 0});

这对我有用。