2010-11-13 14 views

risposta

33

Lasciate MyComponent implementare l'interfaccia HasWidgets per aggiungere/rimuovere i widget secondari.

Il MyComponent.ui.xml sembra semplice come

<g:FlowPanel ui:field="main" /> 

mentre si delega i metodi specificati 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); 
    } 
} 

Calling

<M:MyComponent> 
    <g:Label text="some text" /> 
</M:MyComponent> 

funzionerà in questo modo.

+0

Grazie mille per la risposta molto completa. –

+0

No prob, prego. – z00bs

+0

Ho cercato dappertutto un modo semplice per farlo. Grazie! – roguenet

1

Usando questo XML:

<myapp:mycomponent> 
    <g:Label>Decorated child</g:Label> 
</myapp:mycomponent> 

sarà istanziare MyComponent e quindi chiamare MyComponent.add(label). Tutto quello che devi fare è ignorare lo .add(..) nella classe MyComponent e applicare tutti gli stili che vuoi passare ai componenti.

Problemi correlati