История 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
дважды здесь.