GWT - 在使用places / activities / mappers时我应该在哪里使用代码拆分?

时间:2011-03-16 16:40:51

标签: gwt asynchronous gwt-mvp

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

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

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

  • 要将地点与活动相关联,GWT会调用Activity getActivity(Place place)(来自com.google.gwt.activity.shared.ActivityMapper)来检索活动的新实例。

    我必须再次将所有我的活动置于核心。

以下是我想要尝试的内容:编写自定义com.google.gwt.place.shared.Delegate

  • PlaceChangeRequestEvent上绑定自己。如果未加载与requestedPlace对应的AppPiece,则调用event.setWarning(NEED_TO_LOAD_MODULE)
  • confirm(String message)方法中,始终在消息等于NEED_TO_LOAD_MODULE时返回false(因此不会打扰用户),并通过{{1}加载模块}}。
  • 加载模块后,请致电RunAsync

我的应用程序的每个AppPiece包含一堆活动和相应的视图。由于仅在goTo(requestedPlace)被触发时才会调用地图制作器,因此我可以通过PlaceChangeEvent生成我的活动的新实例。

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

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

1 个答案:

答案 0 :(得分: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/discussion