【问题标题】:Cellbrowser click event on cell单元格上的单元格浏览器单击事件
【发布时间】:2011-07-31 01:43:20
【问题描述】:

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

我的目的是当用户单击单元格浏览器中的单元格时,它会从服务器下载子笔记。我已经玩过 onBrowserEvent 但我无法让它工作。

【问题讨论】:

    标签: java javascript gwt event-handling


    【解决方案1】:

    也许这对其他使用 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");
        }
    }
    

    【讨论】:

      【解决方案2】:

      在你的TreeViewModel 中,你给返回的NodeInfo 一个SelectionModel。您可以在SelectionModel 上收听SelectionChangeEvents(根据您的用例,您可能会使用NoSelectionModel,很可能是一个由需要该功能的所有级别共享的单个onclick行为)

      【讨论】:

      • 感谢您的回答。我试过了,gwt 只在我使用 setSelected(object, true); 时执行处理程序;当我在 cellbrowser 中选择其他单元格时,它不再执行代码。
      【解决方案3】:

      你不能像往常一样添加ClickHandler,因为Cell 不是Widget. AbstractCell 确实有一些方法可以方便你处理事件,但是你必须调用它的构造函数您想收听的事件的名称。例如,您可以将“click”传递给单元格的构造函数,覆盖 onBrowserEvent,并在那里检查“click”事件。

      查看 ClickableTextCell 的来源,了解 Google 如何将点击侦听器添加到单元格。

      【讨论】:

      • 我试过你说的,还是不行。当我想让构造函数知道他必须听这样的点击事件时:super("click", "keydown");Eclipse 总是给出错误。网上有没有例子?我查看了 Google 本身的 ClickAbleTextCell,并尝试像 Google 对 AbstractSafeHtmlCell 一样扩展 AbstractCell 类,但我无法让它工作。
      • 好的,我知道怎么做了!感谢您的快速答复。
      猜你喜欢
      • 2011-09-11
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2014-07-20
      相关资源
      最近更新 更多