2013-08-07 2 views
0

나는 한 번에 3 개의 합성물, 즉 머리글, 꼬리말 및 내용 합성물을 포함하는 간단한 응용 프로그램 구조를 사용합니다. 복합 재료는 다음과 같은 방식으로 배치됩니다.GWT 기록 - 내 화면의 초점이 바뀌는 이유는 무엇입니까?

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

복합 소재 내 EntryPoint에 세 <div> 년대에 할당됩니다. 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); 
} 

이렇게하면 기록이 매우 잘 기록됩니다. 또한 뒤로 버튼을 클릭하면 적절한 페이지로 이동합니다. 그러나 브라우저가 콘텐츠 합성에 초점을 맞추면 브라우저가 맨 아래로 스크롤되는 효과가 있습니다. 그것은 거래 차단기가 아니지만 약간의 사용자 경험을 조금 깰. (설명이 명확하지 않은 경우 알려 주시면 이미지를 추가하겠습니다)

정확한 원인은 무엇이며 어떻게 해결할 수 있습니까?

답변

0

GWT 기록 토큰은 해시 # 토큰과 함께 작동합니다. html에서는 원래 요소가 name 또는 id이고 # 토큰 다음에 문자열이있는 경우 브라우저를 사용하여 페이지의 특정 부분에 집중하려고했습니다. 기록 토큰과 일치하는 id이 있습니까?

handleClicksetContent으로 전화하십시오. 그러나 변경 이벤트가 발생한 후 올바른 호출 인 경우 onValueChange으로 끝나며 setContent을 호출합니다. 따라서 setContent 번을 두 번 호출하는 것 같습니다.

+0

'setContent'에 좋은 점이 있습니다. 중복 된 코드를 제거했습니다. 그러나 역사 토큰과 이름이 일치하는 요소가 없습니다. 수수께끼 같은 ... – Ayrx

관련 문제