2011-01-29 13 views
18

Sto usando CellTable per mostrare i miei record, ma ora il fatto è che voglio mostrare una casella di selezione quando l'utente fa clic su una cella. Un'altra cosa è che la casella di selezione è il mio widget personale, non un predefinito. Potete per favore suggerirmi qualche metodo per farlo?Come posso inserire un widget in una cella CellTable?

+0

Si prega di [di non utilizzare le firme o slogan] (http://stackoverflow.com/faq#signatures) nei tuoi post. – meagar

+0

Ho lo stesso problema - Ho bisogno di rendere alcuni widget abbastanza pesanti (in termini di logica) in celle in una tabella. Quello che volevo da CellTable era di essere in grado di fornire una fabbrica IsWidget da utilizzare per generare il widget per il rendering di ogni cella in una colonna. Non riesco a vedere un modo semplice per farlo, ma preferisco non implementare tabelle da zero. – drdozer

risposta

23

C'è un post sul gruppo GWT di Google che parla di the answer. Fondamentalmente si crea il proprio widget personalizzato normalmente, e all'interno della funzione di rendering si utilizza widget.getElement(). GetInnterHTML().

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, 
      String value, SafeHtmlBuilder sb) { 
     if (value != null) { 
      MyWidget widget = new MyWidget(value); 
      sb.appendEscaped(widget.getElement.getInnerHTML()); 
     } 
} 
+4

Invece di usare widget.getElement.getInnerHTML(), sto usando widget.getElement.getString(), perché include l'HTML esterno. –

+1

è possibile riutilizzare lo stesso widget per rendere l'HTML per ogni cella? (Probabilmente dovrei semplicemente scrivere un codice per scoprirlo ... ma solo per incuriosito ..) – HaveAGuess

2

Qualche tempo fa ho dovuto affrontare il problema simile (provato ad inserire un widget personalizzato nella cella CellList), ma sfortunatamente non ho trovato una soluzione facile.

In genere, è possibile implementare una classe di celle specifica, con estensione AbstractCell o ActionCell. In questo caso dovrai sovrascrivere il metodo render() e implementare il tuo rendering. Un buon esempio è dato in AbstractCell class javadoc.

8

Questo è un anti-pattern. L'intero scopo delle celle è che NON hai widget: devi "renderizzare" l'html direttamente nella cella.

+0

perché hanno aggiunto il supporto per i widget UIBinder alle celltables? (non esattamente una citazione ma dal thread: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/9cfb4a3b5c4af0be/b75305d15a1c32e8?lnk=gst&q=celltable+widget#b75305d15a1c32e8) – HaveAGuess

+0

potrebbe essere, ma a volte inevitabile – jabal

+0

Non sono d'accordo, a volte non vuoi preoccuparti di HTML e lascia che GWT esegua il rendering dei widget per te. – RockyMM

7

C'è un post sul gruppo google GWT che discute la risposta. Fondamentalmente si crea il proprio widget personalizzato normalmente, e all'interno della funzione di rendering si utilizza widget.getElement(). GetInnterHTML().

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { 
    if (value != null) { 
     MyWidget widget = new MyWidget(value); 
     sb.appendEscaped(widget.getElement.getInnerHTML()); 
    } 
} 

Funziona ma c'è una limitazione:

  • È PUOI NON allegare qualsiasi gestore direttamente sul tuo widget (esterno o interno).

ad esempio:

widget.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 

o:

widget.getMyTextBox().addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 
+1

Esiste una soluzione alternativa per questa limitazione? Voglio davvero implementare una tale funzionalità. – nanospeck

+0

dare un'occhiata a http: // StackOverflow.it/questions/4691801/how-can-i-render-a-clickabletextcell-as-an-anchor-in-a-gwt-celltable guarda la risposta di 'thomas' – user949110

+0

Attenzione che l'evento click verrà attivato quando viene fatto clic su ** qualsiasi ** nella colonna. Se nella colonna sono presenti due pulsanti, non sarà possibile distinguere tra i clic su cui si fa clic. In questo caso, fare riferimento a questa risposta: http://stackoverflow.com/questions/9108317/gwt-celltable-need-to-have-two-buttons-in-last-single-cell-of-each-row. – Ben

Problemi correlati