我只有在所有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");
}
}
答案 0 :(得分:2)
从java启动javascript你可以使用本机方法:
public static native void alert(String msg) /*-{
$wnd.alert(msg);
}-*/;
您可以找到更多解释in this documentation
修改强> 如果我把它弄好了,那么只需添加一个Scheduler,它将在控件返回到JavaScript事件循环时执行。
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
executeYourJavaScript();
}
});
更多解释here和a 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完成的。