2011-12-04 11 views
13

Me he enfrentado a una tarea para crear un widget personalizado, tiene comportamiento de contenedor - 3 paneles dentro. y me gustaría usarlo en forma general, como UiBinder CustomButtonwidget personalizado gwt con elementos secundarios configuración en UIBinder (como CustomButton)

<u:MyWidget> 
    <u:image><g:Image .../></u:image> 
    <u:mainContent><g:Panel.../></u:mainContent> 
</u:MyWinget> 

¿Es posible definir que los elementos de encargo del niño de alguna manera o quizás es algo predefinido en el UIBuilder?

Gracias de antemano

Respuesta

16

manera correcta de hacerlo es utilizar la anotación UiChild.

public class MyWidget extends Composite { 
    public MyWidget() { 
    // ... 
    } 

    @UiChild(tagname = "image") 
    void addImage(Image image) { 
    // ... 
    } 

    @UiChild(tagname = "mainContent") 
    void addMainContent(Widget contentWidget) { 
    } 
} 
+0

@Thomas - Pero, ¿cómo se hace esto genéricamente? Por ejemplo, si todos los paneles secundarios implementan myInnerPanel, ¿cómo podría acceder a ese elemento? Los documentos dicen que este nombre de etiqueta debe coincidir exactamente con el nombre del método. Hay un trabajo alrededor? –

+2

bien, lo tengo funcionando. Mientras mi tipo genérico, digamos MyAbstractWidget lo extienda el elemento secundario de la etiqueta 'customtag', entonces en el método @ UiChild, puedo subir de Widget a MyAbstractWidget sin problema. De esta forma, el método @ UiChild y el widget padre pueden manejar cualquier hijo futuro formado correctamente de 'customtag'. –

Cuestiones relacionadas