こんにちは、GWT MVP パターンは初めてです。私はasp.netのバックグラウンドから来ており、現在GWTに取り組んでおり、すべてのビューに共通するメニュー項目を持つマスターページを作成するよう求められています. 最初に、 https: //developers.google.com/web-toolkit/articles/mvp-architecture-2 を使用してサンプル mvp プロジェクトを作成しました。その中で、あるビューから別のビューへのナビゲーションがあります。1 つのビューを一定に保ち、クリックするメニュー項目に応じて他のビューを変更し続けるにはどうすればよいでしょうか。助けてください
3 に答える
あなたが言及した記事は、MVPサポートがGWTに追加される前のものです。概念を説明するのは得意ですが、実際の実装はあまり役に立ちません。続行するには、アクティビティに関する GWT ドキュメントを参照してください: https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces。そこでは、問題の解決策も見つかります。簡単に言うと、 を見てくださいActivityManager
。これにより、すべてのアクティビティが管理されます。アクティビティ マネージャーで、すべてのアクティビティに対して静的になる 1 つのウィジェットを設定します。このウィジェットにはメソッドが必要ですsetWidget
(実際には を実装する必要がありますAcceptsOneWidget
)。各アクティビティの実装で、このウィジェットをstart
方法。また、start メソッドでそのアクティビティの特定のビューを指定して setWidget を呼び出すことにより、アクティビティ固有のビューを設定します。これはすべて非常に簡単に説明されていますが、言及されたドキュメントを読めば概念を理解できるはずです。
画面を 2 つ以上の領域に分割し、各ゾーンに専用の ActivityMapper と ActivityManager を割り当てます。たとえば、1 つのゾーンを MenuActivityManager で「メニュー」、もう 1 つのゾーンを BodyActivityManager で「ボディ」にすることができます。
ここに良い説明があります: http://blog.ltgt.net/gwt-21-activities-nesting-yagni/
この方法の使用には、長所と短所の両方があることに注意してください。ブラウザーは、標準の html をレンダリングするのに数ミリ秒かかります。ウィジェットの mainMenu を作成し、それを (UiBinder を使用して) すべてのビューに含める方が、2 つのアクティビティ マネージャーを扱うよりも簡単かもしれません。
で作業している場合UiBinder
、ui.xml
ファイルは次のようになります。
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
</ui:style>
<g:DockLayoutPanel unit="EM">
<g:north size="4">
//Add Logo, menus or what you want to be displayed for all the pages
</g:north>
<g:center>
//Add code for your desired UI. In java code you change the UI by this "flowpanel"
For eg: <g:FlowPanel ui:field="flowpanel" />
</g:center>
</g:DockLayoutPanel>
<g:center>
次に、このようなJavaコードを使用して、ビューに表示されるウィジェットをクリアして追加するたびにflowpanel.clear();
flowpanel.add(anyWidget you need)
.
したがって<g:north>
、静的ビューに<g:center>
なり、動的ビューになります。これで、希望どおりのページが表示されます。あなただけのあなたのビューを毎回変更することができますので<g:center>
。
<g:east>
このように、必要に応じて、<g:west>
およびを追加できますg:south>
。
UiBinder を使用していない場合は、次のように Java コードですべてを実行します。
final DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Style.Unit.EM);
dockLayoutPanel.addNorth(any widget you need, "4"); //NorthPanel
dockLayoutPanel.add(any widget you need); //CenterPanel
パネルのサイズはどこですか"4"
。変更できます。
このようなdockLayoutPanel.addWest(any widget you need, "4"); //WestPanel
dockLayoutPanel.addEast(any widget you need, "4");//EastPanel
dockLayoutPanel.addSouth(any widget you need, "4"); //SouthPanel
あなたが今考えたことを願っています。