我开始研究将GWT与UiBuilder结合使用。我对如何使用@UiHandler(..)指令来制作简单的事件处理代码(如GWT documentation所写)感到困惑:

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

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

但是,例如,您可以将ListBox与ojit_code一起使用来获取选择某项的事件吗?我在文档的哪里可以看到?

最佳答案

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

至于它是如何工作的-这是GWT魔术的一部分:)我的猜测是,就像其他UiBinder相关代码一样(我认为Google IO上有一个演示文稿,展示了UiBinder生成的代码),在编译时编译器会弄清楚该去哪里。在此示例中:我们有一个Button button,并且我们有一个带有@UiHandler参数的带有ClickEvent注释的方法->必须表示它是ClickHandler(注意该方法的名称无关紧要)。因此,让我们在编译时(可能在构造函数中)添加一些代码,以将处理程序添加到按钮。如果您对更全面的答案感兴趣-请查看来源:D



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

  • 您检查要添加的*Handler,例如 ChangeHandler
  • 它有一个void onChange(ChangeEvent event)-因此,您的方法需要一个ChangeEvent参数,应如下所示:
    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    
  • 08-26 09:30