Подтвердить что ты не робот

Как я могу поместить виджет в CellTable Cell?

Я использую CellTable для показа моих записей, но теперь я хочу показать окно выбора, когда пользователь нажимает на ячейку. Еще одна вещь заключается в том, что поле выбора - это мой собственный виджет, а не предопределенный. Можете ли вы предложить мне любой способ сделать это?

4b9b3361

Ответ 1

В группе GWT google есть сообщение, в котором обсуждается ответ. В основном вы создаете свой собственный виджет как обычно, а внутри функции рендеринга используется 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()); 
        }
}

Ответ 2

Это анти-шаблон. Вся цель ячеек заключается в том, что у вас нет виджетов: вы должны "визуализировать" html непосредственно в ячейке.

Ответ 3

Там есть сообщение в группе Google GWT, в которой обсуждается ответ. В основном вы создаете свой собственный виджет как обычно, а внутри функции рендеринга используется 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()); 
    }
}

Это работает, но есть ограничение:

  • НЕ МОЖЕТ прикреплять любой обработчик непосредственно к вашему виджету (внешнему или внутреннему).

например:

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

или

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

Ответ 4

Некоторое время назад я столкнулся с подобной проблемой (пытался вставить собственный виджет в ячейку CellList), но, к сожалению, не нашел простого решения.

Как правило, вы можете реализовать определенный класс ячеек, расширяя AbstractCell или ActionCell. В этом случае вам придется переопределить метод render() и реализовать собственный рендеринг. Хороший пример приведен в классе AbstractCell javadoc.