0

我正在使用 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即,它使用、startlimit参数计算要放入存储的实际数据。由于我对它在引擎盖下的工作方式知之甚少,我很难让它按照我想要的方式运行。所以问题是:如何强制 Proxy 将正确的分页数据集发送到 Store?

4

1 回答 1

0

我挣扎了好几个星期。在我发布问题 10 分钟后,我自己找到了解决方案,pffffff。问题本质上是由于启动参数造成的。它始终必须为 0,因此当我想重新加载商店时,我必须向 loadPage 方法添加额外的参数。

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

这对我有用。

于 2017-10-12T09:05:51.233 回答