仅当面板加载时GWT启动方法

仅当面板加载时GWT启动方法,gwt,Gwt,只有当所有div都加载到我的VerticalPanel中时,我才能从Java启动Javascript函数,否则我的Javascript函数将抛出异常,因为该元素尚未在页面中。 我该怎么办 这是我的代码: GWT对此有自己的看法。只要addAttachHandler在任何小部件上添加(或从文档中删除)即可收到通知。如果您想要一个一次性事件,则只需在调用处理程序时删除它。要从java启动javascript,您可以使用本机方法: public static native void alert(St

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

这是我的代码:

GWT对此有自己的看法。只要
addAttachHandler
在任何小部件上添加(或从文档中删除)即可收到通知。如果您想要一个一次性事件,则只需在调用处理程序时删除它。

要从java启动javascript,您可以使用本机方法:

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

你可以找到更多的解释

编辑: 如果我做对了,那么只需添加一个调度器,它将在控制返回到JavaScript事件循环时执行

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

当您需要一个浏览器来完成它当前正在做的任何事情,然后再告诉它做其他事情时,请使用Scheduler进行详细解释。例如,如果要仅在对话框完全呈现后才对其执行操作,请执行以下操作:

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

    @Override
    public void execute() {
        myTextBox.setFocus();
    }
});
在本例中,在浏览器完成对话框的渲染之前,不会设置焦点,因此您会告诉程序等待浏览器准备就绪

更新:


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

请共享问题中无法正常工作的代码。有关更多详细信息,请参阅。我的问题不同。。。我必须在页面中加载所有对象之后才启动Javascript函数是的,但是我有很多对象要添加到页面中,并且我必须在加载所有对象之后才启动该函数……你所说的“对象”到底是什么意思?和“loaded”?我从数据库中读取数据,并为每个记录创建一个Div。我想在所有Div都在页面中之后启动一个Javascript函数。在处理所有记录之后,您不能显式地调用一个方法或触发一个事件吗?对不起,我不明白您在哪里告诉调度程序等待渲染完成?
schedulederferred
命令告诉浏览器等待渲染完成。您应该在连接面板后调用它。我还用另一个建议更新了我的答案。
myDialogBox.show();
Scheduler.get().scheduleDeferred(new ScheduledCommand() {

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