1

我使用的 GWT 活动和地点与http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html中描述的差不多,一切正常。

我想做的是从特定页面导航到上一页而不使用History.back(),因为我不想丢失历史状态。(我有一个用户执行操作的页面,成功后我想返回上一页并保持历史状态,另一方面,如果他们取消我确实想使用History.back(),因为我确实想丢失状态)。

我能想到的唯一方法是创建我自己的地方/历史跟踪代码来监听地方/历史更改事件并使以前的地方可供我使用,以便我可以调用placeController.goto(...)

有没有更简单的方法来做到这一点?我错过了什么吗?

4

2 回答 2

3

我采用的方法是将历史令牌存储在代码中(如建议的那样)。我扩展了 PlaceController 并用它来跟踪 EventBus 上的 Place 更改。现在,在我使用 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);
      }
  }
}
于 2012-02-24T17:35:50.087 回答
1

您必须以某种方式跟踪要返回,因为用户可以点击后退按钮而不是取消,这与单击取消相同,只是您的应用程序中没有执行代码,因此您无法控制。

其次,如果您在 url 中有历史记录,则用户可以直接导航到该页面,然后您应该知道当用户单击确定时该去哪里。或者,如果用户直接进入该页面,则将用户重定向到另一个页面。

一种方法是将返回历史令牌存储在您访问的页面的历史令牌中。页面完成后,它可以根据传递的返回令牌返回(或从技术上讲它是“前进”)到该页面。(尽管使用 GWT,您可以轻松地将历史令牌存储在代码中)。

于 2011-10-06T12:49:35.123 回答