3

私は現在、GWT アプリケーションに取り組んでおり、すべてがどのように適合するかについてまだ少し曖昧です (最初にフレームワーク全体を理解することなく変更を加えなければならないことの喜びですが、それはとにかく難しいかもしれません)。

UI の一部 (メイン コンテンツ、ツールバー、リストなど) に対応するアクティビティがいくつかあります。それがアクティビティの意図であるかどうかはよくわかりませんが、今は簡単に変更できないと思います。私の問題は、物事のリストがメインコンテンツにも必要な状態 (現在の選択) を保持し、ある意味でツールバーにも保持されていることです (少なくともツールバーには現在それがあります – 私は尋ねることはできません)。

しかし、実際にそれを保管するのに適切な場所はどこでしょうか? 実際のビューの実装を組み合わせて、選択内容をリストにのみ保存することは、それほど明るい考えではないと思います。

4

1 に答える 1

3

ここには 2 つの主な解決策があります。

  • 各アクティビティ内で状態を維持し、イベントを通じて同期を維持します ( でEventBus)。つまり、「もののリスト」には現在の選択があり、メインビューにも選択があり、ツールバーもそうです。その値が変更されるたびに、変更を行っているアクティビティがイベント バスでイベントを発生させて、他のアクティビティが状態を更新できるようにし、すべてのアクティビティがそれぞれの状態で同じ値を持つようにします。

  • シングルトン オブジェクトを使用して (GIN と依存性注入を使用している場合は、オブジェクトに注釈を付けて@Singletonすべてのアクティビティに注入するだけです)、状態を中央の場所に保ちます。アクティビティは、状態ホルダーオブジェクトにイベント ハンドラーを登録し、変更時に通知されるようにします。つまり、アクティビティが呼び出されるたびにsetCurrentSelection(たとえば)、イベントが発生し (たとえばValueChangeEvent)、すべてのアクティビティがそれをリッスンするため、新しい値に応じてビューなどを更新できます。イベント バスでイベントをディスパッチする ( と同様PlaceController) か、ステート ホルダーにを実装させるかを選択できますHasValueChangeHandlers。アクティビティがstopメモリ リークを回避するため (イベント バスにディスパッチすると簡単になりstartます。メソッドに引数として渡されたバスにハンドラーを登録するだけで、アクティビティが停止すると自動的に登録が解除されます。それについて考える必要さえありません)。 )。

実際には、そのような共有状態(現在の場所PlaceController)の良い例です。

于 2012-07-19T06:42:03.067 に答える