iron:路由器检查路由是否加载了history.back

时间:2015-06-07 20:37:07

标签: meteor iron-router

我尝试检测用户如何到达路线。我想有3个案例:

  1. 该网页直接由网址
  2. 加载
  3. 点击链接
  4. 加载页面
  5. 通过单击浏览器中的历史记录后退或前进按钮加载页面
  6. 有没有办法检测3个案例或 - 这对我来说足够 - 检测用户是否在第二个案件中来到路线?

    为什么? 在我的项目中,我有一个List-Layout。当我向下滚动并单击此列表中的链接时,将呈现新模板,但由于列表中的滚动,窗口现在具有scrollTop值。

    我用这个解决了这个问题:

    Router.configure({
      onAfterAction : function () {
        jQuery(window).scrollTop(0);
      }
    });
    

    在每次加载页面后使用此修复程序,页面将滚动到顶部(与其正常情况一样)。

    可是:

    当我点击列表中的链接然后单击浏览器中的“后退”按钮(history.back)时,页面也会滚动到顶部(因为我的修复) - 没有修复页面将自动跳转到最后一个位置。

    因此我需要这样的东西:

    Router.configure({
      onAfterAction : function () {
        var historyBack;
        historyBack = CheckIfHistoryBackWasClicked();
        if (!historyBack) jQuery(window).scrollTop(0);
      }
    });
    

    有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

尝试向您的链接添加click事件处理程序,并在其中设置scrollToTop会话变量:

"click a": function(e) {
    Session.set("scrollToTop", true);
    return true;
}

然后,做这样的事情:

Router.configure({
  onAfterAction : function () {
    if (Session.get("scrollToTop") == true) {
      jQuery(window).scrollTop(0);
      Session.set("scrollToTop", false);
    }
  }
});