17

次のような、子を装飾するためのコンポーネントを作成したいと思います。

mycomponent.ui.xml:

<g:FlowPanel addStyleNames="myStyle">
    <!-- how can i render children ? -->
</g:FlowPanel>

その後、他の人が使用できます:

<myapp:mycomponent>
    <g:Label>Decorated child</g:Label>
</myapp:mycomponent>

uibinderで子をレンダリングするにはどうすればよいですか?(またはJavaでは、必要な場合)

4

2 に答える 2

33

子ウィジェットを追加/削除するためMyComponentのインターフェースを実装しましょう。HasWidgets

見た目はMyComponent.ui.xmlシンプルです

<g:FlowPanel ui:field="main" />

indで指定されたメソッドHasWidgetsFlowPanel:に委任している間

public class MyComponent extends Composite implements HasWidgets {

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

    interface MyComponentUiBinder extends UiBinder<Widget, MyComponent> {}

    @UiField
    FlowPanel main;

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

    @Override
    public void add(Widget w) {
        main.add(w);
    }

    @Override
    public void clear() {
        main.clear();
    }

    @Override
    public Iterator<Widget> iterator() {
        return main.iterator();
    } 

    @Override
    public boolean remove(Widget w) {
        return main.remove(w);
    }
}

呼び出し

<M:MyComponent>
    <g:Label text="some text" />
</M:MyComponent>

このように動作します。

于 2010-11-14T09:14:46.393 に答える
1

このXMLの使用:

<myapp:mycomponent>
    <g:Label>Decorated child</g:Label> 
</myapp:mycomponent>

インスタンス化MyComponentしてからを呼び出しますMyComponent.add(label)。あなたがしなければならないのは.add(..)あなたのクラスMyComponentでオーバーライドし、あなたがコンポーネントを渡したいどんなスタイルでも適用することです。

于 2010-11-13T23:38:24.193 に答える