我无法弄清楚如何在GWT中的单元格浏览器中的单元格上添加单击处理程序。 我在StackOverFlow上找到了与我的问题相关的另一个question,但它是一个双击处理程序。我无法弄清楚如何只添加一个普通的点击处理程序。
我的目的是当用户点击cellbrowser中的单元格时,它从服务器下载子注释。我已经玩过onBrowserEvent,但我无法让它工作。
答案 0 :(得分:3)
在TreeViewModel
中,您为返回的SelectionModel
提供了NodeInfo
。您可以在SelectionChangeEvent
上收听SelectionModel
(并且考虑到您的使用案例,您可能会使用NoSelectionModel
,很可能是所有需要 onclick 行为)
答案 1 :(得分:2)
您无法正常添加ClickHandler
,因为Cell
不是Widget.
AbstractCell
确实有一些方法可以方便您处理事件,但你必须使用你想听的事件的名称来调用它的构造函数。例如,您将“点击”传递给单元格的构造函数,覆盖onBrowserEvent
,并检查那里的“点击”事件。
查看ClickableTextCell
的来源,了解Google如何将单击侦听器添加到单元格。
答案 2 :(得分:2)
对于使用GWT的其他Web开发人员来说,这也很有趣,所以我就这样做了:
// Create a clickable cell.
Cell<C> cell = new ClickCell() {
@Override
public void render(Context context, C value, SafeHtmlBuilder sb) {
if (value != null) {
sb.appendEscaped(value.getName());
}
}
@Override
public void onBrowserEvent(Context context, Element parent, C value,
NativeEvent event, ValueUpdater<C> valueUpdater) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
if ("click".equals(event.getType())) {
onEnterKeyDown(context, parent, value, event, valueUpdater);
}
}
@Override
protected void onEnterKeyDown(Context context, Element parent, C value,
NativeEvent event, ValueUpdater<C> valueUpdater) {
if (valueUpdater != null) {
valueUpdater.update(value);
}
}
};
这是扩展AbstractCell类的类ClickCell:
public abstract class ClickCell extends AbstractCell<C> {
public ClickCell() {
super("click", "keydown");
}
}