【问题标题】:GWT History - Why does it change the focus of my screen?GWT History - 为什么它会改变我屏幕的焦点?
【发布时间】:2013-08-08 11:33:52
【问题描述】:

我有一个简单的应用程序结构,它将在任何时候包含三个组合 - 我的页眉、页脚和内容组合。复合材料按以下方式布置。

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

复合被分配给我的EntryPoint 中的三个&lt;div&gt;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);
}

这很好地记录了历史。当我单击后退按钮时,它还会将我带到相应的页面。但是,它具有非常奇怪的效果,即使浏览器聚焦在内容组合上,即浏览器滚动到底部。这不是一个交易破坏者,但它有点破坏用户体验。 (如果解释不清楚,请告诉我,我会添加图片)

究竟是什么原因造成的,我该如何解决?

【问题讨论】:

    标签: java gwt browser-history gwt-history


    【解决方案1】:

    GWT 历史令牌与哈希 # 令牌一起使用。在 html 中,这最初是为了使用浏览器来关注页面的特定部分,如果一个元素有一个 nameid 以及 # 标记之后的字符串。会不会是您的 id 与您的历史令牌匹配?

    在你handleClick 中你也调用setContent。但是,如果我在触发更改事件后正确调用,最终会出现在onValueChange,它也调用setContent。所以看起来你在这里调用了两次setContent

    【讨论】:

    • setContent 上的好地方。我已经删除了重复的代码。但是,我没有任何名称与历史令牌匹配的元素。令人费解...
    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-10-19
    • 2014-01-09
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多