GWT Places/Activities — что следует использовать для навигации?

У меня есть веб-приложение GWT Places/Activities. Я использую событие click Anchor для перемещения пользователя в новое «место», поэтому пользователь никак не может открыть какую-либо «ссылку» в новом окне или вкладке. Вопрос - как мне сделать все эти ссылки реальными?


person Andrey Agibalov    schedule 20.10.2011    source источник


Ответы (2)


Возможно, вместо того, чтобы использовать Anchor и слушать ClickEvent, используйте Hyperlink с targetHistoryToken, установленным на название места.

e.g.

<g:Hyperlink text="Home" targetHistoryToken="home" />

person pillingworth    schedule 20.10.2011

Хотя использование Hyperlink (или InlineHyperlink) работает, я бы предпочел использовать ClickHandler для Anchor, потому что, если какое-либо действие возвращает ненулевое значение в mayStop, URL-адрес еще не изменился (тогда как с Hyperlink он имел бы , даже если пользователь решит отменить навигацию).

Чтобы установить цель (href) на Anchor, просто используйте PlaceHistoryMapper. И чтобы правильно обрабатывать ctrl+щелчок, щелчок средней кнопкой мыши и щелчок правой кнопкой мыши, повторно используйте HyperlinkImpl:

Anchor anchor = new Anchor("text", "#" + placeHistoryMapper.getToken(targetPlace));
anchor.addClickHandler(new ClickHandler() {
   private static final HyperlinkImpl IMPL = GWT.create(HyperlinkImpl.class);

   @Override
   public void onClick(ClickEvent event) {
      if (IMPL.handleAsClick(event)) {
         placeController.goTo(targetPlace);
         event.preventDefault();
      }
   }
});
person Thomas Broyer    schedule 20.10.2011
comment
+1 - красиво. При использовании действий и мест это почти всегда то поведение, которое вам нужно. Было бы неплохо, если бы это было встроено в GWT, чтобы нам не приходилось прибегать к секретным планам и хитрым уловкам, чтобы получить что-то столь фундаментальное, как это, работающее, как ожидалось. - person pillingworth; 20.10.2011
comment
@Thomas Broyer: я создал приложение для игровой площадки, чтобы проверить эту идею, и поведение довольно странное. Когда я загружаю страницу в первый раз, все три щелчка левой кнопкой мыши, правый-меню-открыть в новой вкладке и Ctrl-щелчок работают нормально. Но когда я щелкаю левой кнопкой мыши, а затем возвращаюсь, щелчок Ctrl больше не работает - теперь он делает то же самое, что и щелчок левой кнопкой мыши без Ctrl. Перезагрузка всей страницы исправляет это. Мысли? (Я использую Chrome, если это имеет значение) - person Andrey Agibalov; 21.10.2011