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

Gar*_*gos 4 gwt asynchronous gwt-mvp

"core"指的是加载的应用程序的初始部分.

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

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

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

    再次,我必须把我所有的活动放在核心.

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

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

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

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

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

Tho*_*yer 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 /讨论