如何将小部件放在CellTable单元格中?

var*_*mar 18 gwt gwt-celltable

我正在使用CellTable来显示我的记录,但现在我想在用户点击单元格时显示一个选择框.还有一件事是选择框是我自己的小部件,而不是预定义的.你能告诉我任何这样做的方法吗?

Joh*_*ohn 24

GWT谷歌小组有一篇文章讨论了答案.基本上你正常创建自定义小部件,在render函数中你使用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()); 
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用widget.getElement.getInnerHTML(),而是使用了widget.getElement.getString(),因为它包含了外部HTML. (4认同)

Nic*_*tov 10

这是一种反模式.单元格的整个目的是让你没有小部件:你应该直接在单元格中"渲染"html.


Fre*_*her 7

GWT谷歌小组有一篇文章讨论了答案.基本上你正常创建自定义小部件,在render函数中你使用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()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但有一个限制:

  • 无法直接在窗口小部件(外部或内部)上附加任何处理程序.

例如:

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

要么:

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