Как я могу поместить виджет в CellTable Cell? - PullRequest
18 голосов
/ 29 января 2011

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

Ответы [ 4 ]

24 голосов
/ 17 марта 2011

В группе 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()); 
        }
}
10 голосов
/ 07 мая 2011

Это анти-паттерн.Цель ячеек в том, чтобы у вас НЕ было виджетов: вы должны «визуализировать» html непосредственно в ячейке.

7 голосов
/ 12 марта 2013

В группе 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!!!
    }
});
2 голосов
/ 29 января 2011

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

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

...