我开始研究将GWT与UiBuilder结合使用。我有点疑惑你如何使用@UiHandler(..)
指令来制作简单的事件处理代码,如GWT documentation所述:
@UiHandler("button")
void handleClick(ClickEvent e) {
Window.alert("Hello, AJAX");
}
在这种情况下,使用方法handleClick
。
您如何知道每个GWT小部件可以使用@UiHandler
创建哪些方法?对于某些人,您还可以创建doClose()
方法。
但是,你可以使用什么来ListBox
来获取一个项目被选中的事件?我可以在文档中看到这个吗?
答案 0 :(得分:33)
您传递给@UiHandler
注释的参数是您要分配*Handler
的相应字段的名称。因此,在这种情况下,您要为ClickHandler
分配Button button
(实际上,我们只知道字段的名称)。
至于它是如何工作的 - 它是GWT魔术的一部分:)我的猜测是,就像任何其他与UiBinder相关的代码(我认为在Google IO上有一个演示文稿,显示了UiBinder生成的代码),编译时间编译器计算出去哪里。在此示例中:我们有一个Button button
,我们有一个带有@UiHandler
参数的ClickEvent
带注释的方法 - > 必须表示它是ClickHandler
(注意方法的名称不重要)。所以让我们在编译时添加一些代码(可能在构造函数中),将该处理程序添加到按钮中。如果您对更全面的答案感兴趣 - 请查看来源:D
但你能用什么,为... 例如,
ListBox
来获取一个事件 选择了一个项目?在哪里 文档可以看到吗?
在GWT API reference中。在这种情况下,您可能正在寻找ListBox.addChangeHandler。但是你通常不会在那里找到@UiHandler
相关的代码 - 那是因为它是多余的 - 你总是以同样的方式构建@UiHandler
方法:
*Handler
,说ChangeHandler
它有void onChange(ChangeEvent event)
- 因此,您的方法需要ChangeEvent
参数,并且应该如下所示:
@UiHandler("listBox")
void whateverName(ChangeEvent event) {
// ...
}
答案 1 :(得分:1)
您的onModuleLoad方法可能存在问题:
public void onModuleLoad()
{
HelloWorld helloWorld = new HelloWorld("BOTAO");
// Using this way @UiHandler will not work
//Document.get().getBody().appendChild(helloWorld.getElement());
// correct way
RootPanel.get().add(helloWorld);
}