Используя действия и места GWT, можно ли перейти на предыдущую страницу без использования History.back ()? - PullRequest
1 голос
/ 06 октября 2011

Я использую GWTs Активности и Места почти так же, как описано в http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html, и все работает нормально.

Я хотел бы перейти с определенной страницы на предыдущую страницубез использования History.back(), так как я не хочу терять историческое состояние.(У меня есть страница, на которой пользователь выполняет действие, в случае успеха я хочу вернуться на предыдущую страницу и сохранить состояние истории, с другой стороны, если они отменяются, я хочу использовать History.back(), поскольку хочу потерятьгосударство).

Единственный способ сделать это - создать собственный код отслеживания Места / Истории, который прослушивает события об изменении Места / Истории и делает предыдущее Место доступным для меня, чтобы я мог позвонить placeController.goto(...)

Есть ли более простой способ сделать это?Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Подход, который я выбрал, состоял в том, чтобы сохранить маркер истории в коде (как предложено).Я расширил PlaceController и использовал его для отслеживания изменений Place на EventBus.Теперь везде, где я использовал PlaceController, я вместо этого использую PlaceControllerExt, который имеет хороший метод previous (), который возвращает меня туда, откуда я пришел, но перемещается вперед и никогда не покидает приложение.

public class PlaceControllerExt extends PlaceController {

  private final Place defaultPlace;
  private Place previousPlace;
  private Place currentPlace;

  public PlaceControllerExt(EventBus eventBus, Place defaultPlace) {

      super(eventBus);
      this.defaultPlace = defaultPlace;
      eventBus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() {

          public void onPlaceChange(PlaceChangeEvent event) {

              previousPlace = currentPlace;
              currentPlace = event.getNewPlace();
          }
      });
  }

  /**
   * Navigate back to the previous Place. If there is no previous place then
   * goto to default place. If there isn't one of these then it'll go back to
   * the default place as configured when the PlaceHistoryHandler was
   * registered. This is better than using History#back() as that can have the
   * undesired effect of leaving the web app.
   */
  public void previous() {

      if (previousPlace != null) {
          goTo(previousPlace);
      } else {
          goTo(defaultPlace);
      }
  }
}
1 голос
/ 06 октября 2011

Вы должны каким-то образом отслеживать возврат, потому что вместо отмены пользователь может нажать кнопку «Назад», что аналогично нажатию кнопки «Отмена», за исключением того, что в вашем приложении не выполняется код, поэтому у вас нет контроля.

Во-вторых, если у вас есть история в URL, пользователь может перейти непосредственно на эту страницу, а затем вы должны знать, куда идти, когда пользователь нажимает кнопку ОК.Или, если пользователь переходит непосредственно к странице, перенаправьте пользователя на другую страницу.

Один из подходов заключается в сохранении токена истории возврата в токене истории страницы, на которую вы переходите.Когда страница закончена, она может вернуться (или технически это будет «идти вперед») на эту страницу на основе переданного токена возврата.(Хотя с GWT вы можете легко хранить маркер истории в коде).

...