为什么我不能在GWT中隐藏UiBinder中的DialogBox?

时间:2013-09-29 06:35:33

标签: gwt uibinder dialog gwtp

Test.ui.xml

中的

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

运行后,应用程序仍显示DialogBox,因此我尝试在TestView.java中为“wishlistDialogBox”设置隐藏,但它不起作用。

  @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();
  }

出了什么问题,Goodle根本没有解释。

此外,如何重用DialogBox

3 个答案:

答案 0 :(得分:2)

在谈到将它们添加到DOM时,

DialogBox(以及PopupPanel s)在任何其他小部件中都不起作用。您不应该像以前那样直接将它们附加到它(即panel.add(yourDialogBox)UiBinder XML文件中)。相反,您应该创建它们,并简单地调用hide() / show()等方法,以显示/隐藏它(即,在DOM的末尾附加/分离)。

答案 1 :(得分:0)

对我有用的东西是与任何其他小部件分开创建一个Dialogbox。所以它有自己的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();
    }

}

答案 2 :(得分:-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>

然后只需拨打show&amp;像往常一样隐藏DialogBox&amp;它会显示DialogBox,即使DialogBox被包裹在一个不可见的HTMLPanel中。

getView().getWishlistDialogBox().show();