ExtJS 6.2 понимает loadPage при использовании пейджинга с 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)}

Но сетка ничего не показывает. На панели инструментов подкачки отображается сообщение «Нет данных для отображения», и магазин выглядит странно. Я имею в виду, что у него нет данных. store.getData() и store.getCount() не возвращают элементов и 0.

Обходной путь - получить с сервера все данные до последней, которую я хочу визуализировать, и показать последнюю страницу. В случае страницы 2 я могу получить с сервера JSON:

{limit: 20, page: 2, start: 10, total: 1000, items: Array(20)}

Это будет работать, как и ожидалось, но, конечно, это не жизнеспособное решение, поскольку я бы не стал использовать подкачку для простого извлечения небольшого фрагмента данных вместо всего набора данных.

Дело в том, что я подозреваю, что это связано с тем, как работает прокси. То есть он вычисляет фактические данные для помещения в хранилище, используя параметры page, start и limit. Поскольку я недостаточно знаю о том, как это работает под капотом, мне трудно заставить его вести себя так, как я хочу. Итак, вопрос: как заставить прокси получить правильный набор данных с разбивкой по страницам в хранилище?


person ilmorez    schedule 12.10.2017    source источник


Ответы (1)


Я боролся неделями. Через 10 минут после того, как я разместил вопрос, я сам нашел решение, пфффффф. Проблема в основном из-за параметров запуска. Он всегда должен быть равен 0, поэтому мне нужно добавить дополнительные параметры в метод loadPage, когда я хочу перезагрузить хранилище.

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

Это помогает мне.

person ilmorez    schedule 12.10.2017