3

私がGWTで持っている一般的な設計の1つは、AとBの2つの子を含むウィジェットを作成することです。

メインウィジェットに関連付けられたuibinderファイルで、これら2つのウィジェットAとBを宣言します。

私がやりたいのは、ifステートメントに応じてウィジェットAをロードするかどうかです。

理想的なアプローチは、ウィジェットAにprovided = trueを設定し、このウィジェットをロードしたくない場合はウィジェットAをnullに設定することです。しかし、GWTはエラーをスローします。

uibinderでウィジェットを宣言してからロードしない方法はありますか?

ありがとう

編集:多くの議論の後、理想的なアプローチは、オプション=trueのときにフィールド「provided=true」と「optional= true」を宣言することです。フィールドがnullの場合、createAndBindUIは例外をスローしてはなりません。これはクリーンなアプローチです。

この機能がGWTに存在する必要があると思われる場合は、この問題にスターを付けてください: http ://code.google.com/p/google-web-toolkit/issues/detail?id=5699

編集2:トーマスによって説明されているようにLazyPanelを使用することは、これを処理するためのより良い方法のようです。

4

3 に答える 3

5

私はGWTの問題に遭遇し、それが私をここに導いたので、20か月後の私の見解です。

を使用してLazyPanelに設定すると、visible="false"必要になるまでコンテンツが作成されないようになります(呼び出しsetVisible(true)て表示するだけで、コンテンツの遅延初期化がトリガーされます。

LazyPanelSimplePanelはUiBinderと完全に統合されているため、のサブクラスを作成することなく、同じUiBinderテンプレートでコンテンツを宣言できますLazyPanelhttps://developers.google.com/web-toolkit/doc/2.4/DevGuideUiBinder#Lazyを参照してください

于 2012-08-24T08:42:42.923 に答える
1

ロジックを元に戻します。ウィジェットが必要ない場合は削除してください

widget.removeFromParent();

UIBinderがそれらを自動的に定義および作成するため、これはよりクリーンなアプローチだと思います。

于 2010-12-01T14:42:25.543 に答える
1

UiBinder XMLでは条件が許可されていないため、でプレースホルダー(つまり、パネル)を定義ui.xmlし、ビュークラスでそれらへの参照を持ち、そこで特定のウィジェットを作成して追加する必要があるかどうかを判断することをお勧めします。

これは、ネストされたプレゼンターでMVPパターンを使用する場合の一般的なアプローチです。

編集:

リクエストがGWT開発者によって実装されるまで、次のようにメソッドを拡張しFlowPanelて上書きし、add(Widget)チェックすることができますnull

public class ExtendedFlowPanel extends FlowPanel {

    public ExtendedFlowPanel() {
        super();
    }

    @Override
    public void add(Widget w) {
        if (w != null) {
            super.add(w);
        }
    }
}

このようにして、パネルを使用provided = trueして渡すことができます。null

于 2010-12-01T14:49:50.007 に答える