java gwt uibinder

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.