一尘不染

@UiHandler的文档

java

我开始研究将GWT与UiBuilder结合使用。我对如何使用该@UiHandler(..)指令来制作GWT文档中记录的简单事件处理代码感到有些困惑:

@UiHandler("button")
void handleClick(ClickEvent e) {
  Window.alert("Hello, AJAX");
}

在这种情况下,handleClick使用该方法。您如何知道每个GWT小部件可以使用哪些方法@UiHandler?对于某些人,您还可以创建一个doClose()方法。

但是,例如,与a ListBox一起使用时,您可以将其用于什么目的呢?我在文档的哪里可以看到?


阅读 213

收藏
2020-12-03

共1个答案

一尘不染

传递给@UiHandler注释的参数是您要为其分配适当字段的名称*Handler。因此,在这种情况下,你都分配ClickHandler到一个Button button(实际上,我们只是知道这个字段的名称)。

至于它是如何工作的-这是GWT魔术的一部分:)我的猜测是,就像其他UiBinder相关代码一样(我认为Google
IO上有一个演示文稿,展示了UiBinder生成的代码),在编译时编译器会找出问题所在。在这个例子中:我们有Button button,我们有一个@UiHandler具有注解的方法ClickEvent参数- >那 一定
意味着它是一个ClickHandler(注意,这个方法的名字 并不
此事)。因此,让我们在编译时(可能在构造函数中)添加一些代码,以将处理程序添加到按钮。如果您对更全面的答案感兴趣-请查看来源:D

但是,例如,与a ListBox一起使用时,您可以将其用于什么目的呢?我在文档的哪里可以看到?

GWT
API参考中
。在这种情况下,您可能正在寻找ListBox.addChangeHandler。但是您通常@UiHandler在那里找不到相关的代码-
那是因为它是多余的-您始终@UiHandler以相同的方式构造方法:

  1. 您选中*Handler要添加的,说ChangeHandler
  2. 它具有void onChange(ChangeEvent event)-因此,您的方法需要一个ChangeEvent参数,并且应如下所示:
    @UiHandler("listBox")
    

    void whateverName(ChangeEvent event) {
    // …
    }

2020-12-03