Gxt Focus Management - PullRequest
       6

Gxt Focus Management

5 голосов
/ 03 ноября 2010

Я работаю с Gxt. Мне нужно установить фокус на первое включенное поле на странице. Но у меня много страниц, и я хочу централизовать это поведение. В Gxt отсутствует документация, поэтому мне интересно, сталкивался ли кто-нибудь с такой проблемой и сможет ли она мне помочь.

Теперь так происходит в классе каждого компонента

protected void resetFocus() {
    combobox.focus();
}

@Override
public void show() {
    super.show();
    resetFocus();
}

У меня найдено com.extjs.gxt.ui.client.aria.FocusManager , но совершенно неясно, как его использовать. Или, возможно, также возможно получить цепочку полей, когда они идут на компонент в соответствии с направлением. И я могу переместить метод resetFocus в родительский класс.

что-то в этом роде

protected void resetFocus() {
    *getFocusChain().get(0).focus();*
}

Ответы [ 2 ]

3 голосов
/ 17 января 2013

Основываясь на последнем ответе, я заставил его работать в окне GXT3, выполнив следующее:

@Override
public void show() {
    super.show();
    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
        @Override
        public void execute() {
            field.focus();
        }
    });
}

Таким образом, когда окно открывается, поле имеет фокус, и вы можете начать печатать.

2 голосов
/ 23 ноября 2010

Фокус после рендеринга с некоторой задержкой. Поэтому вы должны использовать метод Scheduler.get (). ScheduleDeferred.Или DeferredCommand для gwt 1.7 или раньше.

Пример использования;

Scheduler.get().scheduleDeferred(new ScheduledCommand() {</p> <pre><code>@Override public void execute() { widget.focus(); widget.el().focus(); widget.getElement().focus(); }

});

...