我有一些GWT小部件显示在视图中。
该视图包含以下内容:
FlowPanel mainPanel = new FlowPanel();
RootPanel.get().add(mainPanel);
Label label = new Label("test");
mainPanel.add(label);
FlowPanel otherPanel = new FlowPanel();
mainPanel.add(otherPanel);
在完全呈现视图后,mainPanel获得其最终高度。我需要在渲染过程完成后从mainPanel获取高度值。
这是我到目前为止所做的事情:
new Timer() {
@Override
public void run() {
int height = $(mainPanel).height();
// do something with the mainPanel height
}
}.schedule(300);
Noite:$(mainPanel)是GWTQuery的使用。 我设置了一个计时器,希望在计时器触发时完成视图渲染过程。我想这不是一个非常聪明的解决方案。
如何检测视图是否完全呈现以获得mainPanel的最终高度?
修改
我也尝试过使用:
@Override
protected void onReveal() {
super.onReveal();
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
// get mainPanel height is incorrect
}
});
}
但似乎渲染未完成,因此mainPanel没有正确的高度。
修改
使用SDM时,调度程序似乎在移动设备和桌面上的工作方式不同。我创建了一个演示项目(https://github.com/confile/GWT-2.7-Scheduler-Test)来显示问题。
我在这里为此问题创建了另一个问题:https://stackoverflow.com/questions/27128787/gwt-2-7-scheduler-works-different-on-mobile-and-desktop-in-sdm
答案 0 :(得分:1)
您应该使用调度程序,而不是计时器。见GWT: Timer and Scheduler Classes,它解释了这一区别。
更新:
另外,$(mainPanel)
是什么?你应该这样做:
int height = mainPanel.getOffsetHeight();
答案 1 :(得分:1)
Gwt本身就为你提供了一个钩子。它是onLoad()。你可以覆盖它。
实施例。如果您想知道何时呈现FlowPanel的小部件,可以使用
FlowPanel flowPanel = new FlowPanel(){
@Override
protected void onLoad()
{
//Do your stuff here
}};
答案 2 :(得分:-1)
这张贴于How to detect if a page has fully rendered using jQuery?
$(window).load(function() {
//everything is loaded
});