GWT CellTable сортировка столбцов - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь отсортировать столбец в GWT, используя их пример сортировки ListDataProvider в качестве ссылки

http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting

Проблема в том, что я вижу, что данные столбца моей таблицы сортируются (с помощью отладчика), но таблица никогда не обновляется.Глядя на пример в приведенной выше ссылке, они явно не обновляют отображение.Я что-то здесь упускаю?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 26 февраля 2012

Мой опыт говорит, что обработчик сортировки (т.е. ListHandler) чувствителен к списку, который есть у ListDataProvider, когда вы его создаете.

Поэтому я рекомендую не удалять и не устанавливать новый список для ListDataProvider (конечно, ядумаю, что он должен иметь хотя бы пустой (не нулевой) список при создании).

Просто используйте ListDataProvider.getList() и выполняйте на нем свою работу.

Например, для удаления всех текущих строки устанавливая новые данные, просто позвоните ListDataProvider.getList().clear(), а затем ListDataProvider.getList().addAll(yourNewData); не вызывайте setList(), иначе сортировка не будет работать.

3 голосов
/ 22 февраля 2012

Эти два примера бесполезны и сбивают с толку.

Использование ListHandlers и DataProviders также не слишком полезно для иллюстрации того, как использовать таблицы Cell / Grid.

Примеры скрывают и скрывают одну простую характеристикутаблиц GWT Cell / Grid - вам просто нужно заменять и подавать список в таблицу каждый раз, когда данные изменяются в любом случае.

Использование примеров ListHandlers, Async-обработчиками и DataProviders усложняет довольно простой процесс:бросая в кучу пушистую бесполезную абстрактную элегантность.По сути, эти абстрактные и отвратительные структуры сами выталкивают и отбрасывают записи в список таблиц.Не обращайте внимания на использование Таймера.

Можно также взять список столов за булл-рога и сделать это самостоятельно - намного проще.Я не могу точно вспомнить, как я это делаю, потому что у меня нет при себе кода.

Что вам нужно сделать, это сохранить буферную копию списка записей.Это список записей, которые должны отображаться в таблице.

Неважно, выполняете ли вы асинхронную или иным образом - любое изменение данных, которое вы хотите внести, должно быть сделано в этой буферной копии.Ваш GWT-RPC должен обновить этот буфер.

Когда таблица запрашивает сортировку по возрастанию, ваш компаратор / фильтр создаст восходящую копию буферизованного списка для замены данных в таблице с помощью setRowData.Аналогично, когда таблица запрашивает нисходящую или специализированную фильтрацию.

Использование DataProvider полезно, если вы хотите, чтобы он управлял подкачкой для вас.Намного проще работать с GWT-RPC самостоятельно.Предполагается, что DataProvider обрабатывает сортировку и фильтрацию, запрашивая у сервера отправку ему нового списка, который сортируется / фильтруется в соответствии с пожеланиями таблицы.Зачем вам потреблять сетевой трафик, позволяя серверу управлять вашей фильтрацией / сортировкой, если только у вас нет более 10 страниц записей.

Так что для простого примера эксперимента с 50 записями управляйте списком буферов самостоятельно.

...