繁体   English   中英

GWT 对话框从不显示 - 帮助

[英]GWT DialogBox never shows - help

我写了一个测试复合+入口点,只是为了显示我的测试对话框。 结构是...

  • A)EntryPoint 包含 Composite
  • B)复合包含按钮(在 ScrollPanel 中)以显示 A class
  • C) A class 扩展对话框

事件监听器代码就像...

button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { DialogBox aDialog=new A(); aDialog.center(); aDialog.show(); } });

没有显示任何doalogBox:(我做错了什么?

任何有用的评论表示赞赏

首先尝试添加Window.alert("Handler called;"); 在您的 Button 的 clickHandler 中查看处理程序实际上正在被调用。 如果您看到 javascript 警报对话框(调用了处理程序),则表示问题出在您的 CustomDialogBox 中。 确保在调用show() )之前通过setWidget(Widget w)设置对话框的内容以使其可见,否则不会显示。

如果没有警报(从不调用处理程序),则意味着问题出在您的复合材料中。 在不使用小部件的情况下直接将一些元素添加到 DOM 可能是一个问题,它会破坏 gwt 偶数机制(将解释为什么当您将按钮添加到根面板时它会起作用)。 除此之外,如果不看一些代码就很难判断。

最后,我将发布一些工作代码,以防你决定从这里开始,看看它在哪里失败。 这是一个有效的代码:

首先扩展对话框(不要忘记设置它的小部件):

public class CustomDialog extends DialogBox {
    public CustomDialog() {
        setWidget(new Label("Hello!"));
    }
}

然后构建一个复合:

public CustomComposite() {
    Button b = new Button("Pop it up");
    b.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            new CustomDialog().show();
        }
    });
    initWidget(b);
}

最后 onModuleLoad:

public void onModuleLoad() {
    CustomComposite c = new CustomComposite();
    RootPanel.get().add(c);
}

顺便说一句: center()确实将弹出窗口居中,然后是show() s,因此您不需要同时调用两者

一个可能的原因是您没有向 RootPanel 添加任何内容,在这种情况下,您正在 memory 中创建 DOM 结构,但您没有将其附加到任何内容:

RootPanel.get().add(b);

另一个原因是您似乎没有在对话框上调用 .show 方法:

new MyDialog().show();

您描述的行为可能有多种原因,请发布完整示例以获得更有针对性的答案。

我想我以前遇到过类似的问题,我所做的是在 center() 之前调用 show()。 那会有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM