2013-08-07 4 views
0

У меня есть простая структура приложения, которая будет содержать три композита в любой момент - мои композиторы header, footer и content. Композиты изложены следующим образом.История 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(); 

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

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

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

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

ответ

0

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

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

+0

Хорошее место на 'setContent'. Я удалил дубликат кода. Однако у меня нет элементов, имя которых совпадает с маркером истории. Непонятные ... – Ayrx