2014-11-24 2 views
1

У меня есть пара виджетов 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?

Edit:

Я также попытался использовать:

@Override 
protected void onReveal() { 
    super.onReveal(); 
    Scheduler.get().scheduleDeferred(new ScheduledCommand() { 

     @Override 
     public void execute() { 
      // get mainPanel height is incorrect 
     } 
    }); 
} 

но мне кажется, что визуализация не была завершена, так что mainPanel не имеют правильную высоту.

Edit:

кажется, что планировщик работает по-разному на мобильных и настольных при использовании 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

Может это поможет http://stackoverflow.com/q/8012588/768894 – EMM

ответ

1

Сам Gwt дает вам крюк для этого. Это onLoad(). Вы можете переопределить его.

Пример. Если вы хотите знать, когда виджеты с FlowPanel оказаны, вы можете использовать

FlowPanel flowPanel = new FlowPanel(){ 
         @Override 
         protected void onLoad() 
         { 
         //Do your stuff here 
         }}; 
+0

Отличная идея. Спасибо! – confile

-1

Это была размещена в How to detect if a page has fully rendered using jQuery?

$(window).load(function() { 
    //everything is loaded 
}); 
+0

Это не работает, потому что загружается мое окно и Я изменяю только элементы dom. Я использую GWTP. Таким образом, событие загрузки не будет запускаться снова. – confile

+0

Зачем вам отправлять ответ jQuery в вопрос GWTP? – CrazySabbath

1

Вы должны использовать планировщик, а не по таймеру. См. GWT: Timer and Scheduler Classes, в котором объясняется различие.

UPDATE:

Кроме того, что $(mainPanel)? Вы должны сделать:

int height = mainPanel.getOffsetHeight(); 
+0

См. Мое редактирование. Я попробовал Scheduler, но кажется, что рендеринг не завершен, когда выполняется отложенный планировщик. – confile

+0

Это невозможно.Браузеры имеют только один поток - они не могут выполнять код параллельно. Во всяком случае, у вас другая проблема - я обновил свой ответ. –

+0

@ $ (mainPanel) - это использование [GWTQuery] [1]. Какой метод планировщика вы бы использовали в моем случае? – confile

Смежные вопросы