1

私のシナリオ (修正を歓迎します) では、ナビゲーションとコンテンツ パネルを備えたメイン ページがあります。

main
 |
 +--- Navigation (sets contents in ContentPage)
 |
 \--- ContentPage 

ここで、実際に内容を変更できるようにNavigation参照が必要です。ContentPageつまり、mainがビルドされたときに、 に渡す必要がありContentPageますNavigation。これは私が現在使用しているコードです:

public class Main extends Composite {

    @UiField
    Panel contentPanel;

    @UiFactory
    Navigation makeNavigation() {
        return new Navigation(contentPanel);
    }

    interface MyUiBinder extends UiBinder<Widget, Middle> {
    }

    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    public Main() {
        initWidget(uiBinder.createAndBindUi(this));
    }
}

問題は、makeNavigation が呼び出された時点では UiField contentPanelまだ設定されていない (null である) ことです。呼び出されたという保証がないので、これは合理的だと思いinitWidgetます。

それで、私はこれに間違って近づいていますか?作成順序を選択する方法はありますか?

4

2 に答える 2

0

これまでのところ、次の回避策を使用して動作するようになりました。

public class Middle extends Composite {

    @UiField
    Panel contentPanel;

    @UiField
    Navigation navigation;

    interface MyUiBinder extends UiBinder<Widget, Middle> {
    }

    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    public Middle() {
        initWidget(uiBinder.createAndBindUi(this));
        navigation.setContentPanel(contentPanel);
    }
}

これにより、存在が保証されcontentPanelますが、ページのビルド フェーズがNavitagion2 つのステップに分割されます。これは「コミュニティが承認した」アプローチですか?

于 2013-03-14T13:28:51.243 に答える