我开始研究将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) {
// ...
}