I would like to create a component to decorate its children, such as:
mycomponent.ui.xml:
<g:FlowPanel addStyleNames="myStyle">
<!-- how can i render children ? -->
</g:FlowPanel>
and then others can use:
<myapp:mycomponent>
<g:Label>Decorated child</g:Label>
</myapp:mycomponent>
How can i render the children in uibinder? (or in Java, if i must)
Let MyComponent
implement the HasWidgets
interface for adding/removing child widgets.
The MyComponent.ui.xml
looks as simple as
<g:FlowPanel ui:field="main" />
while you delegate the methods specified ind HasWidgets
to the FlowPanel
:
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);
}
}
Calling
<M:MyComponent>
<g:Label text="some text" />
</M:MyComponent>
will work this way.
Using this XML:
<myapp:mycomponent>
<g:Label>Decorated child</g:Label>
</myapp:mycomponent>
will instantiate MyComponent
and then call MyComponent.add(label)
. All you have to do is override .add(..)
in your class MyComponent
and apply any styles that you want to passed components.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With