GWT - запоминать состояние флажков после отправки RangeChangeEvent в таблицу - PullRequest
1 голос
/ 30 ноября 2011

У меня есть CellTable с прикрепленной к нему MultipleSelectionModel.После некоторого изменения данных необходимо обновить таблицу и загрузить с сервера новые данные.

Однако мне необходимо обновить состояние флажков для вновь загруженных данных.Так что я могу запрашивать поля выбора с помощью selectionModel.getSelectedSet () - но теперь мне нужно найти эти объекты в таблице и «проверить» их.

Поскольку содержимое объектов изменяется и поскольку они используются в качестве ключей вВнутренние карты в компонентах GWT - я был вынужден написать «обертку» над этими объектами, которая использует только идентификатор в equals / hashCode.

Поэтому в основном я сохраняю selectedSet перед событием запуска, затем выполняю итерацию по нему и вызываю метод setSelected:

Set<T> selectedSet = selectionModel.getSelectedSet();
RangeChangeEvent.fire(table,...)
if (selectedSet != null)
    for (T obj : selectedSet) {
        selectionModel.setSelected(obj,true);
    }
}

Есть ли лучший подход?

1 Ответ

3 голосов
/ 01 декабря 2011

Для этого ProvidesKey: создайте экземпляр ProvidesKey, который возвращает идентификатор ваших объектов, которые будут использоваться в качестве их ключей, и передайте этот экземпляр вашей модели выбора при ее создании:

MultiSelectionModel<X> selectionModel = new MultiSelectionModel<X>(new ProvidesKey<X>() {
   @Override
   public Object getKey(X item) {
      return item.getId();
   }
});

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

...