java - ¿Cómo crear un componente compuesto gwt con niños usando uibinder?
(2)
Deje que MyComponent
implemente la interfaz de HasWidgets
para agregar / eliminar widgets secundarios.
El MyComponent.ui.xml
ve tan simple como
<g:FlowPanel ui:field="main" />
mientras HasWidgets
los métodos especificados ind HasWidgets
al 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);
}
}
Vocación
<M:MyComponent>
<g:Label text="some text" />
</M:MyComponent>
trabajará de esta manera
Me gustaría crear un componente para decorar a sus hijos, como:
mycomponent.ui.xml:
<g:FlowPanel addStyleNames="myStyle">
<!-- how can i render children ? -->
</g:FlowPanel>
y luego otros pueden usar:
<myapp:mycomponent>
<g:Label>Decorated child</g:Label>
</myapp:mycomponent>
¿Cómo puedo hacer que los niños en uibinder? (o en Java, si es necesario)
Usando este XML:
<myapp:mycomponent>
<g:Label>Decorated child</g:Label>
</myapp:mycomponent>
creará una instancia de MyComponent
y luego llamará a MyComponent.add(label)
. Todo lo que tiene que hacer es anular .add(..)
en su clase MyComponent
y aplicar los estilos que quiera que pasen a los componentes.