【问题标题】:How do I determine whether I am going "forward" or "backward" through my History in GWT?我如何确定我在 GWT 中的历史记录是“前进”还是“后退”?
【发布时间】:2011-02-11 05:16:36
【问题描述】:

我正在查看 GWT 中的 HistoryHistory JavaDocs,我注意到无法判断是否按下了前进或后退按钮(无论是实际按下还是用户按下)。 “按钮按下”由您注册的 addValueChangeHandler 处理,但唯一传递给处理程序的是历史堆栈上的字符串。没有迹象表明“历史记录”是“后退”(使用后退箭头按钮)还是“前进”(使用右箭头按钮)。有什么方法可以确定吗?

【问题讨论】:

  • 出于好奇 - 能否提供此类知识有用的原因/用例?
  • 我希望当您推入历史堆栈或按下右箭头按钮时页面转换为“向左滑动”,并在您退出历史堆栈时“向右滑动”。就像 iPhone ui。

标签: java gwt browser-history gwt-history


【解决方案1】:

对不起,你不能。即使可以,也有一些浏览器,比如 Firefox,可以让用户“跳”回不止一页。因此,如果您尝试依赖相对“坐标”而不是绝对坐标,导航可能会破坏您的应用程序。

您始终可以在历史令牌上附加某种计数器。如果你只有一个历史监听器,这并不难。

【讨论】:

    【解决方案2】:

    你可以做一个这样的 UrlManager:

       public class UrlManager implements ValueChangeHandler<String> {
    
       public UrlManager() {
         History.addValueChangeHandler(this);       
        }
    
      public void onValueChange(ValueChangeEvent<String> event) {     
        String historyToken = event.getValue();
    
      }
       }
    

    将每个历史标记保存到列表中。
    如果它是一个全新的历史令牌,则将其添加到列表中。 如果是上一个历史令牌,则返回按钮已被按下。

    我建议使用列表来保存标记并保存可以在列表中上下移动的迭代器。所以最初它指向列表的末尾。如果新令牌是列表中的前一项,则返回按钮已被按下。 如果您在列表中间(后退几次)并且有一个新条目进入(按下了新链接),请删除列表的其余部分(不能再继续前进)并添加新条目 - 和将迭代器移动到该项目。

    你明白了。

    【讨论】:

    • 如果是前一个历史token,也可能按下前进按钮......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2023-03-24
    • 2023-04-08
    • 2023-03-31
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多