我是 GWT 的新手,正在努力实现以下目标:

这是我编写的代码:

public class MyWebApp implements EntryPoint {
    // The main container for everything the user sees (the "view")
    private LayoutPanel mainPanel;

    // Simple HTML for the header ("MyWebApp") and subsequent <hr/>
    private SafeHtml header;

    // The three links "Dashboard", "Monitors" and "Help Desk"
    private HorizontalPanel navMenu;

    // The empty content that gets populated when user clicks one of
    // the 3 links.
    private Panel menuContent;

    @Override
    public void onModuleLoad() {
        // The initial fragment contains the header, nav menu and empty "content" div.
        // Each menu/screen then fills out content div.
        initMainPanel();

        RootPanel.get().add(mainPanel);
    }

    private void initMainPanel() {
        SafeHtmlBuilder headerBuilder = new SafeHtmlBuilder();
        navMenu = new HorizontalPanel();

        // Leaving null until user clicks on one of the 3 menus.
        // Then the menu will decide what panel gets injected for
        // this panel.
        menuContent = null;

        // Create the simple HTML for the header.
        headerBuilder.append("<h1>MyWebApp</h1><hr/>");

        // Create the navMenu items.
        Hyperlink dashboardLink, monitorsLink, helpDeskLink;

        // Homepage is http://www.mywebapp.com
        // I want the dashboardLink to inject menuContent and "redirect" user to
        // http://www.mywebapp.com/dashboard
        dashboardLink = new Hyperlink("???", "???");

        // http://www.mywebapp.com/monitors
        monitorsLink = new Hyperlink("???", "???");

        // http://www.mywebapp.com/help-desk
        helpDeskLink = new Hyperlink("???", "???");
        navMenu.add(dashboardLink);
        navMenu.add(monitorsLink);
        navMenu.add(helpDeskLink);

        // Add all widgets to the mainPanel.
        mainPanel.add(new HTML(headerBuilder.toSafeHtml().toString()));
        mainPanel.add(navMenu);
        mainPanel.add(menuContent);

        // Position and size the widgets (omitted for brevity).
        // mainPanel.setWidgetHorizontalPosition(...);
    }

    private HTML getDashboardMenuContent() {
        return new HTML("This is the dashboard.");
    }

    private HTML getMonitorsMenuContent() {
        return new HTML("These are the monitors.");
    }

    private HTML getHelpDeskMenuContent() {
        return new HTML("This is the help desk.");
    }
}

最重要的是:
  • 如何“连接” Hyperlink ,以便当用户单击它们时,我可以调用适当的 getXXXMenuContent() 方法,然后将其添加到 menuContent

  • 但是也:
  • 我觉得我在这里做错了什么:mainPanel.add(new HTML(headerBuilder.toSafeHtml().toString())); - 如果是,那是什么?!?我应该如何以安全(因此使用 Safe* 对象)、高效且符合推荐做法的方式添加简单的 <h1><hr/>
  • 我应该在这里实现 UiBinder 吗?如果是这样,我会为每个菜单的内容或整个 UiBinder 制作 mainPanel ,还是两者兼而有之?

  • 提前致谢!

    最佳答案

    就像是

    dashboardLink.addClickHandler(
       new ClickHandler()
       {
           public void onClick( ClickEvent event )
           {
               mainPanel.setWidget( getDashboardMenuContent() );
           }
       } );
    

    您应该注意 Hyperlink.addClickHandler(...) 已弃用,建议改用 Anchor.addClickHandler(...)

    至于其他问题:使用 UIBinder 构建 UI 更优雅、更容易,所以一定要研究一下,但一定要先尝试让“它”工作,以避免增加 .ui.xml 设置的复杂性:-)

    干杯,

    10-06 05:35