2013-08-07 19 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

相关问题