2015-05-01 5 views
2

Я хочу установить фокус на определенное поле (org.gwtbootstrap3.client.ui.Input) в диалоговом окне (org.gwtbootstrap3.client.ui.Modal) перед тем, как появится диалог. Случай использования кажется довольно распространенным, если у вас есть диалог с одним полем, например . Загрузить текст или . Добавить канал Диалоги right here. Однако я не мог понять, как настроить фокус на данный компонент gwtbootstrap3.Установите фокус на вход в gwtbootstrap3 Modal

Компонент Input имеет метод setFocus(true). Я предположил, что настройка фокуса перед показом диалога не будет работать, а это не так. Поэтому логичным решением является вызов метода внутри ScheduledCommand. Например:

Scheduler.get().scheduleDeferred(new ScheduledCommand() { 

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

}); 

Это обычно работает со стандартными компонентами GWT, но, похоже, не помогает в этом случае. Я нашел способ получить уведомление, как только диалог будет показан через ModalShowHandler. Например:

modal.addShowHandler(new ModalShowHandler() { 

    @Override 
    public void onShow(ModalShowEvent evt) { 
     textField.setFocus(true); 
    } 

}); 

Я даже попытался объединить оба, добавив отложенный вызов к ручке. Не повезло. Есть идеи?

ответ

2

Вы должны слушать на ModalShownEvent (примечание: Shown, а не Show).

ModalShowEvent уволен, когда модальный запросил (например, программно) для отображения.

ModalShownEvent увольняется, когда модально отображается.

Это несколько запутывающее именование основано на событиях родного Bootstrap Modal's events: show.bs.modal и shown.bs.modal.

ModalShownEvent в сочетании с обычным Scheduler#scheduleDeferred должен сделать трюк.

+0

Работает как очарование. Даже без отложенного звонка. –

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