使用GWT活动和地点可以导航到上一页而不使用History.back()吗?

时间:2011-10-06 10:12:57

标签: gwt browser-history gwt-activities

我正在使用GWTs活动和地点,就像http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html中描述的一样,并且一切正常。

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

我能想到的唯一方法是创建我自己的地方/历史记录跟踪代码,该代码可以监听地方/历史记录更改事件并使我可以使用上一个地方,以便我可以致电placeController.goto(...) < / p>

有更简单的方法吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

我采用的方法是将历史记录存储在代码中(如建议的那样)。我扩展了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);
      }
  }
}

答案 1 :(得分:1)

你必须以某种方式跟踪要返回的内容,因为除了取消,用户可以点击后退按钮,这与单击取消相同,除了你的应用程序中没有代码被执行,所以你没有控制权

其次,如果您在网址中有历史记录,则用户可以直接导航到该网页,然后您应该知道用户点击确定后的位置。或者,如果用户直接转到该页面,请将用户重定向到另一个页面。

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