ExtJS 6.2 在将分页与 MemoryStore 一起使用时理解 loadPage
ExtJS 6.2 understanding loadPage when using Paging with MemoryStore
我正在使用 ExtJS 6.2、带分页的 MemoryStore 并尝试从远程源检索数据。我使用 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)}
但是网格不显示任何内容。分页工具栏显示 'No data to display' 消息,商店看起来很奇怪。我的意思是它没有数据。
store.getData()
和 store.getCount()
returns 没有项目和 0。
解决方法是从服务器获取所有数据,直到我想要可视化的最后一个数据并显示最后一页。如果是第 2 页,我可以从服务器获取 JSON:
{limit: 20, page: 2, start: 10, total: 1000, items: Array(20)}
这会按预期工作,但当然不是一个可行的解决方案,因为我不会利用分页来只检索一小块数据而不是整个数据集。
问题是,我怀疑这与代理的工作方式有关。即,它使用 page
、start
和 limit
参数计算要放入存储中的实际数据。因为我不太了解它是如何在引擎盖下工作的,所以我很难让它按照我想要的方式运行。所以问题是:如何强制代理将正确的分页数据集获取到商店?
我挣扎了几个星期。在我发布问题 10 分钟后,我自己找到了解决方案,pffffff。问题本质上是由于启动参数引起的。它必须始终为 0,因此当我想重新加载商店时,我必须向 loadPage 方法添加额外的参数。
me.store.loadPage(received_data.data.page, {start: 0});
这对我有用。
我正在使用 ExtJS 6.2、带分页的 MemoryStore 并尝试从远程源检索数据。我使用 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)}
但是网格不显示任何内容。分页工具栏显示 'No data to display' 消息,商店看起来很奇怪。我的意思是它没有数据。
store.getData()
和 store.getCount()
returns 没有项目和 0。
解决方法是从服务器获取所有数据,直到我想要可视化的最后一个数据并显示最后一页。如果是第 2 页,我可以从服务器获取 JSON:
{limit: 20, page: 2, start: 10, total: 1000, items: Array(20)}
这会按预期工作,但当然不是一个可行的解决方案,因为我不会利用分页来只检索一小块数据而不是整个数据集。
问题是,我怀疑这与代理的工作方式有关。即,它使用 page
、start
和 limit
参数计算要放入存储中的实际数据。因为我不太了解它是如何在引擎盖下工作的,所以我很难让它按照我想要的方式运行。所以问题是:如何强制代理将正确的分页数据集获取到商店?
我挣扎了几个星期。在我发布问题 10 分钟后,我自己找到了解决方案,pffffff。问题本质上是由于启动参数引起的。它必须始终为 0,因此当我想重新加载商店时,我必须向 loadPage 方法添加额外的参数。
me.store.loadPage(received_data.data.page, {start: 0});
这对我有用。