GWT - Неожиданное срабатывание CellCist SelectionChangeEvent

У меня есть две кнопки "Следующий элемент" и "Предыдущий элемент" и несколько пользовательских виджетов, содержащих CellList. При нажатии кнопки я вызываю метод моего виджета, который изменяет выбор в CellList, вызывая его SelectionModel:

selectionModel.setSelected(value, true);

Когда я обновляю содержимое CellList, кнопки работают нормально, но когда я выбираю элемент в списке, щелкая по нему, происходит следующее: например, у меня есть элементы {0, 1, 2, 3, 4, ..} на список. Я нажимаю на элемент 1, затем нажимаю кнопку "Следующий элемент" два раза. Эти SelectionChangeEvent происходит:

  1. Изменить выбор с 1 -> 2 (при первом нажатии кнопки)
  2. 2 -> 3 (при втором нажатии)
  3. 3 -> 1

Но после шага 2, если я нажимаю "Предыдущий", он корректно возвращается к элементу 1. Поэтому элемент, который я щелкнул мышью, не позволяет выделению пройти больше, чем один шаг вокруг него.
Я понятия не имею, откуда приходит третье событие. Мое единственное предположение, что событие ручного выбора продолжает ожидаться после стрельбы, но я не знаю, как это проверить. Кто-нибудь знает причину этой проблемы?

UPD:
Я нашел подтверждение, что выделение при нажатии на событие продолжает висеть где-то в EventBus: когда я меняю фильтры поиска, я получаю доступ к SelectionModel так же, как при нажатии кнопки и устанавливаю выделение для первого элемента. Но если пользователь нажимал на CellList до того, как это происходило: во-первых, выбор изменяется на 0, во-вторых, он возвращается к ранее выбранному, если новый выбор данных содержит этот элемент.

upd (для вопроса Юмита):

nextButton.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
      /* Omitting checks that there are elements on the list,
         some element is selected and isn't last */
      T value = dataProvider.getList().get(currentIndex() + 1);
      singleSelectionModel.setSelected(value, true);
      singleSelectionModel.isSelected(value);
      Element rowElement = cellList.getRowElement(index);
      rowElement.scrollIntoView();
  }
}

upd: нашел причину этой проблемы: http://code.google.com/p/google-web-toolkit/issues/detail?id=6310

1 ответ

Кажется, вам нужно использовать HandlerRegistration. Так что событие множественного клика не вызывается.

Ссылаться на:

GWT Handler Registratin

а также

ссылка по теме

Другие вопросы по тегам