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ます。requestedPlaceに対応するAppPieceがロードされていない場合は、event.setWarning(NEED_TO_LOAD_MODULE)
  • このconfirm(String message)メソッドでは、メッセージが等しい場合は常にNEED_TO_LOAD_MODULEfalseを返し(ユーザーに迷惑をかけないようにします)、を介してモジュールをロードしますRunAsync
  • モジュールがロードされたら、goTo(requestedPlace)

私のアプリケーションの各AppPieceには、一連のアクティビティと対応するビューが含まれています。マッパーはが起動されたときにのみ呼び出されるため、PlaceChangeEventを介してアクティビティの新しいインスタンスを生成できますAppPiece.getSomeActivityInstance()

これでうまくいくと確信していますが、気になるのは

  • requestedPlaceに応じてロードするAppPieceを見つけると、マッパーと非常によく似たコードを記述しなければなりません。
  • 対応するAppPiece内に自分の場所を配置したい
  • この目的のためにオーバーライドDelegateするのは難しいので、より良い解決策を探しています
4

1 に答える 1

5

すべてのアクティビティをコアに配置する必要はありません(いわゆる)。Activityインスタンスは同期的に取得されますが、非同期で開始することはできます。これはあなたがあなたのGWT.runAsync電話をかける場所です。

http://code.google.com/p/google-web-toolkit/issues/detail?id=5129およびhttps://groups.google.com/d/topic/google-web-toolkit/8_P_d4aT-0Eを参照してください/討論

于 2011-03-21T23:49:15.607 に答える