单元格上的Cellbrowser点击事件

时间:2011-04-06 18:11:41

标签: java javascript gwt event-handling

我无法弄清楚如何在GWT中的单元格浏览器中的单元格上添加单击处理程序。 我在StackOverFlow上找到了与我的问题相关的另一个question,但它是一个双击处理程序。我无法弄清楚如何只添加一个普通的点击处理程序。

我的目的是当用户点击cellbrowser中的单元格时,它从服务器下载子注释。我已经玩过onBrowserEvent,但我无法让它工作。

3 个答案:

答案 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");
    }
}