4

“核心”是指加载的应用程序的初始部分。

  • 为了将 url 绑定到地点,GWT 使用PlaceTokenizer<P extends Place>. 从 url 加载应用程序时,它会调用该方法P getPlace(String token)来检索要调用的位置的新实例。

    由于代码拆分的异步性质,我无法runAsync在此方法中创建 a 内的位置。所以我必须把我的应用程序的所有地方都放在核心中。

  • 要将场所链接到活动,GWT 调用Activity getActivity(Place place)(from com.google.gwt.activity.shared.ActivityMapper) 来检索活动的新实例。

    再一次,我必须把我所有的活动都放在核心中。

这是我想尝试的:编写一个自com.google.gwt.place.shared.Delegate定义

  • 将自身绑定在PlaceChangeRequestEvent. 如果 requestPlace 对应的 AppPiece 没有加载,则调用event.setWarning(NEED_TO_LOAD_MODULE)
  • 在该confirm(String message)方法中,当消息等于时总是NEED_TO_LOAD_MODULE返回 false (因此它不会打扰用户),并通过RunAsync.
  • 加载模块后,调用goTo(requestedPlace)

我的应用程序的每个 AppPiece 都包含一堆活动和相应的视图。由于映射器仅在PlaceChangeEvent被触发时被调用,所以我可以通过AppPiece.getSomeActivityInstance().

我很确定这会起作用,但困扰我的是

  • 根据 requestPlace 查找要加载的 AppPiece 将迫使我编写与我的映射器非常相似的代码
  • 我想在相应的 AppPiece 中放置我的位置
  • Delegate为此目的覆盖很棘手,我正在寻找更好的解决方案
4

1 回答 1

5

您不必将所有活动都放在核心中(正如您所说的那样):虽然同步检索 Activity 实例,但允许它异步启动。这是你GWT.runAsync打电话的地方。

请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=5129https://groups.google.com/d/topic/google-web-toolkit/8_P_d4aT-0E /讨论

于 2011-03-21T23:49:15.607 回答