【问题标题】:uibinder gwt method calluibinder gwt 方法调用
【发布时间】:2013-01-17 10:57:02
【问题描述】:

我现在正在努力适应 GWT 和 UiBinder。但我无法解决这个问题。 一个例子来告诉你我的意思:

MainMenu.ui.xml

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:gwt="urn:import:com.google.gwt.user.client.ui" xmlns:my="urn:import:com.wn.webapp.client.UiBinder">

   <gwt:VerticalPanel>
     <my:TopMenu/>
     <gwt:VerticalPanel>
         <gwt:HTMLPanel>
             <gwt:TextBox/>
         </gwt:HTMLPanel>
         <my:ItemList/>
         <my:PageMenu/>
     </gwt:VerticalPanel>
   </gwt:VerticalPanel>
</ui:UiBinder

我创建了一个 MainMenu 并将一些 ui.xml 文件嵌入其中。这工作正常。网站看起来不错。

但是我该怎么做呢? 这是我嵌入到 MainMenu.ui.xml 中的 PageMenu.ui.xml 文件的代码。

public class PageMenu extends Composite{

  private static PageMenuUiBinder uiBinder = GWT.create(PageMenuUiBinder.class);

  interface PageMenuUiBinder extends UiBinderWidget, PageMenu{}

  public PageMenu(){
      initWidget(uiBinder.createAndBindUi(this));
  }

  public void setButtonText(ArrayListString textIds){
       //doessomething
  }
}

现在我想打电话给前任。 onModuleLoad() 中的 setButtonText() 方法。

public void onModuleLoad()
{
    MainMenu mainmenu = new MainMenu();
    RootPanel.get().add(this.mainmenu);
    // call it here (setButtonText())
}

我该怎么做?

问候 劳拉(我还不是一个经验丰富的程序员。所以当你尝试回答时请注意这一点:D)THX

【问题讨论】:

  • 请也发布 PageMenu.ui.xml。
  • 这只是一个简单的例子。不是我的代码本身,因为我不能发布公司的代码。^^ 可能看起来像...
  • 但这与内容无关。这只是关于调用方法。

标签: gwt methods widget call uibinder


【解决方案1】:

要访问button.setText(),您必须首先访问button。所以,你的PageMenu.ui.xml 必须有这样的东西:

<gwt:Button ui:field="button" />

并且您的 PageMenu.java 必须有字段声明:

@UiField
Button button;

为PageMenu(在MainMenu)和按钮(在PageMenu)实现getter,然后你可以这样做:

public void onModuleLoad()
{
    MainMenu mainmenu = new MainMenu();
    RootPanel.get().add(this.mainmenu);
    mainmenu.getPageMenu().getButton().setText("What you want.");
}

【讨论】:

  • 是的,我知道如何在 PageMenu.java 类本身中使用 uifields^^,但我需要从另一个类访问该按钮。 (onModuleLoad() 没有在 PageMenu.class 中声明)所以。通常我会创建一个 PageMenu 实例并使用该方法。但是 PageMenu 嵌入在 MainMenu 中,而 MainMenu 是在 onModuleLoad() 中创建的。所以...我想我需要访问由 MainMenu 以某种方式创建的 PageMenu 实例。但是怎么做呢?^^
  • 如此简单。只需在 MainMenu 类中实现一个 getPageMenu,在 PageMenu 类中实现一个 getButton 并执行:mainmenu.getPageMenu().getButton().setText()
  • 哇,非常感谢。不知道为什么我自己没有弄清楚。很简单。 =)
  • 我根据我们的理解更改了答案。如果您满足您的需求,请标记为已接受。
  • 不能因为我没有足够的声誉^^
【解决方案2】:

您必须创建 2 个访问器:

  • PageMenu.java 中的getButton()

  • MainMenu.java 中的getPageMenu()

您现在可以使用

调用它
mainMenu.getPageMenu().getButton().setText("your text");

【讨论】:

  • 谢谢。 =) 但我认为在 MainMenu.java 中首先需要这样的东西。页面菜单页面菜单; @UiFactory PageMenu makePageMenu() { this.pageMenu = new pageMenu();返回 this.control;还是有其他方法可以获取实例?
  • 您有几种方法可以获取 Ui 对象的实例。这取决于你需要什么。如果您必须使用一个或多个参数构造您的对象,您可以使用这些注释:@UiConstructor@UiFactory@UiField(provided=true),如下所述:link。如果你不需要带参数的构造函数,你应该使用@UiField不提供参数的注解或provided=false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多