仅在加载面板时才使用GWT启动方法

时间:2014-12-15 14:44:10

标签: gwt

我只有在所有div加载到我的VerticalPanel时才从Java启动Javascript函数,否则我的Javascript函数会抛出异常,因为该元素尚未出现在页面中。 我该怎么办?

这是我的代码:

@UiField VerticalPanel areaBody;

areaBody.addHandler(new MyLoadHandler(), LoadEvent.getType());


public class MyLoadHandler implements LoadHandler {

    @Override
    public void onLoad(LoadEvent event) {
        // TODO Auto-generated method stub

        Window.alert("onLoad");

    }
}

3 个答案:

答案 0 :(得分:2)

从java启动javascript你可以使用本机方法:

public static native void alert(String msg) /*-{
  $wnd.alert(msg);
}-*/;

for a short example look here

您可以找到更多解释in this documentation

修改 如果我把它弄好了,那么只需添加一个Scheduler,它将在控件返回到JavaScript事件循环时执行。

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        executeYourJavaScript(); 
    }
});

更多解释herea little example

答案 1 :(得分:0)

GWT有一个AttachEvent。只有addAttachHandler才能在文档中添加(或删除)时通知任何小部件。如果您想要一次性事件,那么只需在调用它时删除它。

答案 2 :(得分:0)

当您需要浏览器完成其当前正在执行的任何操作之前使用Scheduler,然后再告诉它执行其他操作。例如,如果您只想在完全渲染后使用对话框执行某些操作:

myDialogBox.show();
Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        myTextBox.setFocus();
    }
});

在此示例中,在浏览器完成对话框的渲染之前,不会设置焦点,因此您告诉程序等待浏览器准备就绪。

更新:

根据您对其他答案的评论,您可能面临另一个问题:等待从服务器加载所有数据。这是使用asynchronous callback methods完成的。