2013-05-14 5 views
0

У меня есть страницы, которые должны иметь динамическое количество флажков, и входы в зависимости от данных, полученных из базы данныхGWT элементы загрузки динамически на странице загрузки

теперь я так:

  1. замыкающие RPC вызова на компонент нагрузки (получение данных для входов)
  2. onSuccess добавить входы динамически на форме

результат: форма отображается без содержания (потому что это делает асинхр вызова), только после того, как изменение размера, он отображает содержимое правильно (вероятно, я могу стрелять resize событие или redraw с моей самости, не знаю, как ..)

вопрос: Я новичок в GWT, что является лучшим способом для выполнения этой задачи? (Сейчас я использую GWT-доб http://gwt-ext.com/, но я думаю, что это не важно)

обновление: обновить панель, что можно назвать doLayout();

ответ

2

Я не знаком с GWT-вн, но в «ванили» GWT у вас есть два варианта:

  1. Обновить виджет (который должен показать результат) в методе onSuccess
  2. Действуйте с остальной части вашего кода, пока результат не вернется.

Чтобы уточнить, мне нужно больше вашего кода.

+0

это на много кода там, у меня есть TabPanel макет и имеют пропуск на панели HTTP: // GWT-доб .com/docs/2.0.4/com/gwtext/client/widgets/Panel.html, который содержит мою форму, как вы обновляете свой виджет в ваниле; и как вы делаете Proceed, вы блокируете все приложение, пока (! result) {}? – Sergey

+0

Обновление обычно может выполняться только в определенных виджетах, таких как таблицы или списки. Поэтому, если ваша форма не имеет метода обновления/перерисовки, она не нуждается в ней. – Ben

+0

Чтобы задержать остальную часть кода, вы можете поместить его в новый метод и вызвать его в методе onSuccess. Новый метод может состоять в создании этой формы и ее прикреплении к панели. – Ben

1

У меня была аналогичная проблема, содержимое моего виджета загружалось в течение нескольких секунд. Я отображать «» Загрузка, пожалуйста подождите ... «» метки, пока не будет загружен виджет:

final VerticalPanel mainPanel = new VerticalPanel(); 

    initWidget(mainPanel); 
    mainPanel.add(new Label("Loading, please wait ...")); 
    mainPanel.add(new myCustomWidget()); // this constructor uses RPC to get content 

    Timer t = new Timer() 
    { 
     public void run() 
     { 
      if (!mainPanel.getWidget(1).isVisible()) { 
       // do nothing 
      } else { 
       // remove label "Loading, please wait ..." 
       mainPanel.remove(0); 
       // stop timer 
       cancel(); 
      } 
     } 
    }; 
    // repeat every 30 miliseconds until myCustomWidget is visible 
    t.scheduleRepeating(30);