2010-11-13 7 views
17

ich eine Komponente erstellen möchten ihre Kinder dekorieren, wie zum Beispiel:Wie erstelle ich eine gwt-Composite-Komponente mit Kindern mit uibinder?

mycomponent.ui.xml:

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

und dann können andere verwenden:

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

Wie kann ich render die Kinder in Uibinder? (Oder in Java, wenn ich muss)

Antwort

33

Lassen Sie MyComponent implementieren Sie die HasWidgets Schnittstelle zum Hinzufügen/Entfernen von untergeordneten Widgets.

Die MyComponent.ui.xml sieht so einfach wie

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

, während Sie die Methoden angegeben ind HasWidgets zum FlowPanel delegieren:

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> 

Aufruf wird auf diese Weise arbeiten.

+0

Vielen Dank für die sehr vollständige Antwort. –

+0

Kein Problem, gern geschehen. – z00bs

+0

Ich habe überall nach einer einfachen Möglichkeit gesucht, dies zu tun. Vielen Dank! – roguenet

1

Mit diesem XML:

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

wird MyComponent instanziiert und dann MyComponent.add(label) nennen. Alles, was Sie tun müssen, ist .add(..) in Ihrer Klasse MyComponent überschreiben und alle Stile anwenden, die Sie Komponenten übergeben möchten.

Verwandte Themen