2015-12-01 5 views
1

Я пытаюсь применить фильтр к хранилищу данных, на котором есть активный пейджинг. В настоящее время я использую статическое хранилище данных вместо использования прокси. Однако фильтр применяется к текущей странице, указанной в сетке данных, а не ко всему хранилищу данных.Как фильтровать данные сетки с пейджингом в ExtJS 5

Дело 1: Я попытался отключить пейджинг, применить фильтр, а затем снова активировать пейджинг. Однако фильтр был активен для текущей страницы не для всего хранилища данных.

Случай 2: Я пытался добавить сортировщик для хранения данных перед применением Case 1. Это тоже не сработало.

Есть ли способ фильтровать все данные и отображать результаты фильтрации в пейджинге?

Примечание: Я пытался написать аналогичный код на Сенча Fiddle но сетка не выгружаемого на этой скрипке, there is sample code

ответ

1
  1. Статическое хранилище данных не поддерживает подкачки, так как подкачка производится с помощью прокси-сервера и читатель. Однако вы можете определить данные прокси-сервера pagingmemory (ExtJS 4) или прокси-сервера memory (ExtjS 5/6) с помощью enablePaging:true.

  2. Для ajax прокси, пейджинг выполняется путем отправки размера страницы и запускается на сервер. Если сервер игнорирует эти свойства и обслуживает все, что у него есть в базе данных, пейджинг не будет работать для ajax прокси. Сервер может отправлять только записи, которые должны быть видны в сетке.

  3. Знайте, что прокси-сервер ajax также должен предоставить totalCount для работы поискового вызова. Чтобы увидеть, как работает pagingToolbar, добавьте в свой магазин: totalCount:25. И ваш файл pagingToolbar показывает вам, что есть пять страниц. Все остальное еще не работает правильно, потому что см. 1. Удалите totalCount еще раз, это не поможет вам дальше.

  4. Обычно totalCount доставляется на сервер и при условии, в магазин читателем: JsonReader обеспечивает totalCount, если отчеты сервера обратно в TOTALCOUNT в положении, указанном в totalProperty собственности.

  5. Если вы используете разбивку на страницы и хотите видеть 25 записей с правильной сортировкой и фильтрацией, вам нужно будет использовать remoteSort:true и remoteFilter:true. В случае AjaxProxy, фильтрация и сортировка затем должны быть реализованы на стороне сервера.

  6. Фильтры, которые вы применяете на стороне клиента, всегда будут применяться после пейджинга, поскольку пейджинг происходит на стороне сервера. Они не могут быть частью одного и того же хранилища, на котором вы устанавливаете удаленные фильтры, поэтому вам придется привязать свою сетку к ChainedStore, которая берет ваш оригинальный магазин в качестве источника. Затем примените фильтры на стороне клиента к скопированному хранилищу, а удаленные фильтры - в исходное хранилище.

+0

Вы правы, я вижу, что мой подход был неправильным, также это просто веб-приложение, и оно должно делать сложные работы на стороне сервера, как это. Благодарю. – AsyncTask

+0

Когда у вас есть прокси-сервер 'memory' с конфигурацией' pagingEnabled' (в более старой версии ExtJS 'pagingmemory' proxy), вы можете выгружать локальные данные, а оповещение происходит локально. Но проблема все еще сохраняется, разбиение на страницы применяется до сортировки и фильтрации. – MarthyM

+0

Я нашел решение в [Sencha forum thread] (https://www.sencha.com/forum/showthread.php?305119-Grid-Filter-on-Local-Paging). Чтобы правильно сортировать и фильтровать локальные данные, необходимо настроить конфигурацию магазина 'remoteSort' и' remoteFilter' для фильтрации и сортировки данных прокси. – MarthyM