История GWT - Почему это меняет фокус моего экрана?

У меня есть простая структура приложения, которая будет содержать три компонента одновременно - мой заголовок, нижний колонтитул и контентный контент. Композиты разложены следующим образом.

<body>
    <div id="header">
    <div id="content">
    <div id="footer">
</body>

Композиты назначены на три <div>в моем EntryPoint, EntryPoint также содержит обработчик истории следующим образом.

History.addValueChangeHandler(new ValueChangeHandler<String>() {
    @Override
    public void onValueChange(ValueChangeEvent<String> event) {
        String historyToken = event.getValue();

        if(historyToken.isEmpty()) {
            parseTokens();
            ContentContainer.INSTANCE.setContent(new IndexScreen());
        }

        else if(historyToken.equalsIgnoreCase("registration")) {
            ContentContainer.INSTANCE.setContent(new RegisterScreen());
        }

        else if(historyToken.equalsIgnoreCase("login")) {
            ContentContainer.INSTANCE.setContent(new LoginScreen());
        }
    }
});

History.fireCurrentHistoryState();

В моих композитах у меня есть несколько ClickEvent обработчики, которые похожи на следующее.

@UiHandler("registerLink")
public void handleClick(ClickEvent event) {
    ContentContainer.INSTANCE.setContent(new RegisterScreen());
    History.newItem("registration", true);
}

Это очень хорошо регистрирует историю. Это также приводит меня к соответствующим страницам, когда я нажимаю кнопку "Назад". Тем не менее, он имеет очень странный эффект фокусировки браузера на композицию контента, с эффектом прокрутки браузера вниз. Это не прерыватель сделки, но это немного мешает работе пользователей. (Дайте мне знать, если объяснение не понятно, я добавлю изображения)

Что именно вызывает это и как я могу это исправить?

1 ответ

Жетоны истории GWT работают с хешем # маркер. В html изначально предполагалось использовать браузер для фокусирования на определенной части страницы, если элемент имеет name или же id со строкой после # маркер. Может быть, у вас есть id соответствует вашему токену истории?

Также в тебе handleClick ты звонишь setContent, Но если я правильно позвоню после того, как он вызовет событие изменения и в конечном итоге onValueChange, который также называет setContent, Похоже, ты звонишь setContent дважды здесь.

Другие вопросы по тегам