GWT-Textcell 未触发 onclick 事件

发布于 2024-12-12 01:49:11 字数 747 浏览 0 评论 0原文

我正在尝试从文本单元格捕获 onclick 事件。为什么这不触发点击事件 -

        TextCell tempCell = new TextCell() {
            @Override
            public void onBrowserEvent(Cell.Context context, Element parent, String value, 
                    NativeEvent event, ValueUpdater<String> valueUpdater) {
                 if ("click".equals(event.getType())) {
                     Window.alert("Clicked me from cell");
                 }
            }
        };
        Column<Contact, String> tempColumn = new Column<Contact, String>(tempCell) {
          @Override
          public String getValue(Contact object) {
            return object.address;
          }


        };
        table.addColumn(tempColumn, "Address");

I am trying to capture the onclick event from a textcell. why does not this fire the click event -

        TextCell tempCell = new TextCell() {
            @Override
            public void onBrowserEvent(Cell.Context context, Element parent, String value, 
                    NativeEvent event, ValueUpdater<String> valueUpdater) {
                 if ("click".equals(event.getType())) {
                     Window.alert("Clicked me from cell");
                 }
            }
        };
        Column<Contact, String> tempColumn = new Column<Contact, String>(tempCell) {
          @Override
          public String getValue(Contact object) {
            return object.address;
          }


        };
        table.addColumn(tempColumn, "Address");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青春如此纠结 2024-12-19 01:49:11

我相信 GWT 事件是枚举,例如 Event.ONCLICK。

因此,要解决此问题,请尝试直接使用 Event.ONCLICK.toString() 并查看事件是否触发。

一般来说,请记住,代码中不要有松散的字符串,这一点很重要,因为假设事件的名称是“click”是一种非常脆弱的技术,如果发生任何更改,可能会使您的应用程序无法运行。

I believe GWT events are enums, for example, Event.ONCLICK.

So to solve, try to directly use the Event.ONCLICK.toString() and see if the event fires.

In general, rememeber its important not to have loose strings in your code because assuming that the name of the event is "click" is a very fragile technique which could render your application disfunctional if anything changes .

活泼老夫 2024-12-19 01:49:11

这将不起作用,因为 TextCell 不消耗任何事件。您必须将 AbstractSafeHtmlCell 子类化,并通过将事件传递到构造函数来告诉它您想要使用哪些事件。

这会做:

private class MyTextCell  extends AbstractSafeHtmlCell<String> {

 /**
  * Constructs a TextCell that uses a {@link SimpleSafeHtmlRenderer} to render
  * its text.
  */
  public MyTextCell() {
    super(SimpleSafeHtmlRenderer.getInstance(), "click");

  }



  @Override
  public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
    if (value != null) {
      sb.append(value);
    }
  }

  @Override
  public void onBrowserEvent(Context context, Element parent,
        String value, NativeEvent event,
        ValueUpdater<String> valueUpdater) {
    GWT.log("Click event!!!!!! Not listening to anything else");
  }
}

This will not work because TextCell does not consume any events. You must sub-class AbstractSafeHtmlCell instead and tell it which events you want to consume by passing them into the constructor.

This will do:

private class MyTextCell  extends AbstractSafeHtmlCell<String> {

 /**
  * Constructs a TextCell that uses a {@link SimpleSafeHtmlRenderer} to render
  * its text.
  */
  public MyTextCell() {
    super(SimpleSafeHtmlRenderer.getInstance(), "click");

  }



  @Override
  public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
    if (value != null) {
      sb.append(value);
    }
  }

  @Override
  public void onBrowserEvent(Context context, Element parent,
        String value, NativeEvent event,
        ValueUpdater<String> valueUpdater) {
    GWT.log("Click event!!!!!! Not listening to anything else");
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文