2013-08-07 23 views
0

我有一個簡單的應用程序結構,在任何時候都會包含三個組合 - 我的頁眉,頁腳和內容組合。複合材料按以下方式佈置。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中,如果一個元素的#標記後面有一個nameid字符串,那麼最初打算使用瀏覽器專注於頁面的特定部分。難道你有一個id匹配你的歷史記號?

同樣在你​​你叫setContent。但是,如果我在觸發更改事件後正確接聽電話,並且最終會在onValueChange(也稱爲setContent)中結束。所以看起來你在這裏打了兩次電話setContent

+0

適合'setContent'。我已經刪除了重複的代碼。但是,我沒有任何元素的名稱與歷史記號相匹配。百思不得其解...... – Ayrx

相關問題