gwt gwt-celltable

gwt - ¿Cómo puedo poner un widget en una celda CellTable?



gwt-celltable (4)

Hay una publicación en el grupo de Google GWT que discute la respuesta. Básicamente, crea su widget personalizado de manera normal y, dentro de la función de render, usa widget.getElement ().

@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()); } }

Funciona pero hay una limitación:

  • NO PUEDES adjuntar ningún controlador directamente en tu widget (externo o interno).

p.ej:

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!!! } });

Estoy usando CellTable para mostrar mis registros pero ahora lo que quiero es mostrar un cuadro de selección cuando el usuario hace clic en una celda. Una cosa más es que el cuadro de selección es mi propio widget, no un predefinido. ¿Puedes por favor sugerirme algún método para hacer esto?


Este es un anti-patrón. El propósito principal de las celdas es que NO tenga widgets: se supone que debe "renderizar" html directamente en la celda.


Hace algún tiempo me enfrenté con un problema similar (intenté insertar un widget personalizado en la celda de CellList), pero desafortunadamente no encontré una solución fácil.

En general, puede implementar una clase de célula específica, extendiendo AbstractCell o ActionCell . En este caso, tendrá que anular el método render () e implementar su propia representación. Un buen ejemplo se da en la AbstractCell .


Hay una publicación en el grupo de Google GWT que discute la respuesta . Básicamente, crea su widget personalizado de manera normal y, dentro de la función de render, usa widget.getElement ().

@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()); } }