私は GWT が初めてで、ビューの実装に問題があります... MVP と SmartGWT を使用しています。MVP を解決する方法とその奇妙な点を定義することで、これを公開します。
私の onModule では、UIbinder でビルドされたクラスを定義します。LayoutPanel を宣言し、クラスのコンストラクターでこのように設定しました。
layoutPanel = binder.createAndBindUi(this);
このクラスにコンテナがあります:
public void setBodyLayout() {
panel.setWidgetLeftWidth(menuPanel, xx, PCT, xxx, PCT);
panel.setWidgetRightWidth(bodyPanel, xx, PCT, xx, PCT);
}
menuPanel と bodyPanel はどちらも上記のクラスで宣言された simplePanel です (UIfield は UIbinder で使用されます)。LayoutPanelにあります。私のActivityMapperのメソッド表示には、このメソッドがあります(実際には、メニューとボディ用に、以下のような2つのメソッドと2つのコンテナの2つのActivityMappersがあります)
public AcceptsOneWidget getBodyContainer() {
return new AcceptsOneWidget() {
@Override
public void setWidget(IsWidget w) {
Widget widget = Widget.asWidgetOrNull(w);
bodyPanel.setWidget(widget);
}
};}
onModule に戻り、ActivityMapper を次のように宣言しました
BodyActivityMapper bodyContainerActivityMapper = new BodyActivityMapper(clientFactory);
ActivityManager bodyContainerActivityManager = new ActivityManager(bodyContainerActivityMapper, eventBus);
bodyContainerActivityManager.setDisplay(my_class_described_above.getBodyContainer());
同じ作業が MenuActivityMapper で行われました...
ついに
RootLayoutPanel.get().add(my_class_described_above.getLayoutPanel());
getLayoutPanel() が、上で宣言したクラスで宣言された私の layoutPanel を返すとき。
したがって、各リージョンには独自の ActivityMapper.ActivityMapper があり、メニューの ActivityMapper には 1 つのアクティビティしかなく、「ActivityMapperBody」にはメニューによってトリガーされるいくつかのアクティビティがあります。
コンテナのユーティリティは、さまざまな「アクション」のレイアウトを解決することです。アクティビティで開始されたビューを受け取るために、ゾーンを定義しました。
しかし、この構成はUIbinderで構築されたビューでのみ機能します...各ビューで、レイアウトを宣言し、次のように返します
public Widget asWidget() {
return my_layout_declared;
}
レイアウトを返すと、何も機能しません。理由はよくわかりませんが、smartgwt の場合はさらに悪いと思います。必要なのは、レイアウトを取得してコンテナーに配置することだけです... smartgwt を使用すると、多くの時間を節約できます...
誰でも理解できるように、問題をより詳細に説明しました。そして、あなたの投稿が私に役立つかどうか、Chris Lercher に尋ねてください。
読んでくれてありがとう