@UiHandler文档

2022-09-01 23:10:59

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

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

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

但是,您可以使用什么来获取选择项目的事件,例如a?在文档的哪个位置可以看到此内容?ListBox


答案 1

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

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

但是,您可以使用什么来获取选择项目的事件,例如a?在文档的哪个位置可以看到此内容?ListBox

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

  1. 您选中要添加的,例如更改处理程序*Handler
  2. 它有一个 - 所以,你的方法需要一个参数,应该看起来像这样:void onChange(ChangeEvent event)ChangeEvent

    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    

答案 2

可能您的问题出在您的 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);  
}

推荐