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
?
答案 0 :(得分:2)
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();