2011-12-04 13 views
13

Ho affrontato un'attività per creare widget personalizzati, ha un comportamento del contenitore: 3 pannelli all'interno. e vorrei usarlo in modo generico come UIBinder CustomButtonwidget personalizzato gwt con configurazione di elementi figlio in UIBinder (come CustomButton)

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

E 'possibile definire che gli elementi figli in qualche modo personalizzato o forse è cosa predefinita nel UIBuilder?

Grazie in anticipo

risposta

16

modo corretto per farlo è quello di utilizzare il UiChild annotazione.

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

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

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

@Thomas - Ma come si fa genericamente? Ad esempio, se tutti i pannelli figlio implementano myInnerPanel, come potrei accedere a quel bambino? I documenti dicono che questo nome di tag deve corrispondere esattamente al nome del metodo. C'è un lavoro in giro? –

+2

ok, ho funzionato. Finché il mio tipo generico dice che MyAbstractWidget è esteso dal figlio del tag 'customtag', quindi nel metodo @ UiChild, posso eseguire l'upcast da Widget a MyAbstractWidget senza problemi. In questo modo il metodo @ UiChild e il widget parent possono gestire qualsiasi figlio futuro correttamente formato di "customtag". –