2013-04-29 1 views
1

У меня есть CellList с SingleSelectionModel мой случай использования:CellList всегда помнить старый выбор после обновления новых данных, даже если старый выбор очищается

  1. Пользователь выбирает одну строку (oldProxy) в CellList.
  2. Пользователь создает один прокси (newProxy) и отправляет на сервер.
  3. Клиент получает ответ на успех, а CellList начинает запрашивать новейшие данные с сервера.
  4. CellList, заполненный новейшими данными, и строка на шаге 1 по-прежнему выбрана.

Но я хочу, чтобы выбрать самый новый ряд на шаге 4, я использую

selectionModel.setSelected(newProxy); 

, но, кажется, он не работает и до сих пор выберите строку в step1.

Я попытался отменить строку перед шагом 2:

selectionModel.setSelected(oldProxy, false); 

, но в конце концов он все-таки выбрать строку в step1, это странно. Есть идеи об этом?

+0

Вы уверены, что речь идет о выборе, а не о «выборе клавиатуры» _? Вы пытались отладить? (например, установка точки останова в 'isSelected' модели выбора и просмотр переданного значения и callstack?) –

+0

Здравствуйте, дело не в« выборе клавиатуры », я попытался отлаживать, после того, как мой CellList заполнил новыми данными, я называю' selectionModel .setSelected (newProxy) ', но в probelm находится в' resolveChanges() 'в SingleSelectionModel, он немедленно возвращается, потому что' newSelectionPending' является ложным. Я думаю, это потому, что CellList просто выбирает старую выделенную строку. Я попытаюсь воспроизвести его позже в проекте корабля. – Mike

+0

Hi Thomas, как ваш намек, первопричиной является «выбор клавиатуры», после того как я отлаживаю очень длинный 'resolPendingState()' – Mike

ответ

0

Оказалось, известный GWT issue6310, отключить KeyboardSelectionPolicy и он просто работает, как я освобожденный, спасибо Томасу за большой намек и Давида на ссылку.

0

Убедитесь, что вы передаете поставщика ключей (интерфейс ProvidesKey) в конструктор SingleSelectionModel. Если вы не используете поставщика ключей, он, вероятно, будет использовать equals() на ваших прокси, чтобы попытаться найти соответствие, но поскольку вы запросили новые экземпляры с сервера, старый экземпляр не будет соответствовать ни одному из новых экземпляров.

В документе GWT вы можете найти пример here.

Смотрите также: Select element in CellList using SelectionModel or ListDataProvider

+0

Спасибо Дэвиду, я использовал встроенный GWT 'EntityProxyKeyProvider' – Mike

Смежные вопросы