【问题标题】:Documentation for @UiHandler@UiHandler 的文档
【发布时间】:2011-03-27 07:51:39
【问题描述】:

我开始考虑将 GWT 与 UiBuilder 结合使用。我对如何使用@UiHandler(..) 指令来制作GWT documentation 中所写的简单事件句柄代码感到有点困惑:

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

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

但是,您可以使用什么来获取选择项目的事件,例如,ListBox?我可以在文档的哪里看到这个?

【问题讨论】:

    标签: java gwt uibinder


    【解决方案1】:

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

    至于这究竟是如何工作的——它是 GWT 魔法的一部分 :) 我的猜测是,就像任何其他 UiBinder 相关代码一样(我认为 Google IO 上有一个演示文稿,显示了 UiBinder 生成的代码),在编译时间编译器计算出什么去哪里。在这个例子中:我们有一个Button button,我们有一个带有ClickEvent参数的@UiHandler注解方法-> 必须意味着它是一个ClickHandler(注意方法的名字没关系)。因此,让我们在编译时(可能在构造函数中)添加一些代码,将处理程序添加到按钮。如果您对更全面的答案感兴趣 - 请查看来源:D

    但是你能用什么,因为 例如,ListBox 获取事件 选择了一个项目?在哪里 文档我可以看到吗?

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

    1. 您检查要添加的*Handler,例如ChangeHandler
    2. 它有一个void onChange(ChangeEvent event) - 所以,你的方法需要一个ChangeEvent 参数,应该是这样的:

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

    【讨论】:

    • 哇,这几乎听起来像魔术。我自己不会想出通配符式的行为。
    • 我建议您观看 Google IO 2010 和 2009(甚至 2008 年)的 GWT 会议 - GWT 团队成员展示并解释了其中的一些魔力 :)
    • Kilmer:谢谢你的提示。我一定会这样做的!
    • 谢谢。在这方面缺乏文件。我喜欢使用 @UiHandler 注释,因为它确实清理了我的演示者。
    【解决方案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);  
    }
    

    【讨论】:

    • 谢谢!让我头疼
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多