1

Test.ui.xml

<g:DialogBox ui:field="wishlistDialogBox" autoHide="true">
     <g:caption>Test</g:caption>
     <g:HTMLPanel> some widgets..</g:HTMLPanel>
</g:DialogBox>

运行后,应用程序仍然显示DialogBox,所以我尝试为“wishlistDialogBox”设置隐藏,TestView.java但它没有工作。

  @UiField DialogBox wishlistDialogBox;
  @Inject
  public TestView(final Binder binder) {
        widget = binder.createAndBindUi(this);
        wishlistDialogBox.hide();
   }

然后我为它设置了隐藏,TestPresenter.java但它仍然没有工作

  @Override
  protected void onBind() {
      super.onBind();
      getView().getWishlistDialogBox().hide();
  }

怎么回事,古德尔根本没有解释。

另外,如何复用DialogBox

4

3 回答 3

2

DialogBox(和PopupPanel一般的 s )在谈到将它们添加到 DOM 时不像任何其他小部件那样工作。您永远不应该像以前那样将它们直接附加到它(即,panel.add(yourDialogBox)或在UiBinderXML 文件中)。相反,您应该创建它们,并简单地调用hide()/show()和类似的方法,以使其显示/隐藏(即,在 DOM 的末尾/从 DOM 附加/分离)。

于 2013-09-29T11:21:14.217 回答
0

对我有用的是与任何其他小部件分开创建一个对话框。所以它有自己的 Java 文件和自己的 ui.xml 文件:

UiBinder xml文件:

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

  <g:DialogBox ui:field="dialog">
    <g:caption>My Dialog</g:caption>
    <g:HTMLPanel> 
      <g:Button ui:field="closeButton" text="close" /> 
    </g:HTMLPanel> 
  </g:DialogBox>

</ui:UiBinder> 

Java 文件:

public class MyDialog { // here you do not inherit anything

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

    interface MyDialogUiBinder extends UiBinder<Widget, MyDialog> {
    }

    @UiField
    DialogBox dialog;

    @UiField
    Button closeButton;

    public MyDialog() {
      // make cast to DialogBox
      dialog = (DialogBox) (uiBinder.createAndBindUi(this));
    }


    public void hide() {
      dialog.hide();
    }

    public void show() {
      dialog.center();
    }

    @UiHandler("closeButton")
    public void onClick(ClickEvent event) {
      hide();
    }

}
于 2013-09-29T09:00:25.470 回答
-1

最后我想出了一个办法,就是把它DialogBox变成一个隐形的HTMLPanel

<g:HTMLPanel visible="false"> 
    <g:DialogBox ui:field="wishlistDialogBox" autoHide="true">
        <g:caption>Test</g:caption>
        <g:HTMLPanel> some widgets..</g:HTMLPanel>
    </g:DialogBox>
</g:HTMLPanel>

DialogBox然后像往常一样调用 show & hide & 它会显示被包裹在一个不可见DialogBox的内部。DialogBoxHTMLPanel

getView().getWishlistDialogBox().show();
于 2013-09-29T13:48:56.297 回答