Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor iron:路由器检查路由是否加载了历史记录。返回_Meteor_Iron Router - Fatal编程技术网

Meteor iron:路由器检查路由是否加载了历史记录。返回

Meteor iron:路由器检查路由是否加载了历史记录。返回,meteor,iron-router,Meteor,Iron Router,我试图检测用户是如何到达路线的。我想有三种情况: 该页面由URL直接加载 该页面是通过单击链接加载的 通过单击浏览器中的历史后退或前进按钮加载页面 是否有任何方法可以检测到这3种情况,或者-这对我来说足够-检测到用户是否在第2种情况下到达路线 为什么? 在我的项目中,我有一个列表布局。当我向下滚动并单击此列表中的链接时,将呈现新模板,但由于列表中的滚动,窗口现在有一个scrollTop值 我用这个解决了这个问题: Router.configure({ onAfterAction : func

我试图检测用户是如何到达路线的。我想有三种情况:

  • 该页面由URL直接加载
  • 该页面是通过单击链接加载的
  • 通过单击浏览器中的历史后退或前进按钮加载页面
  • 是否有任何方法可以检测到这3种情况,或者-这对我来说足够-检测到用户是否在第2种情况下到达路线

    为什么? 在我的项目中,我有一个列表布局。当我向下滚动并单击此列表中的链接时,将呈现新模板,但由于列表中的滚动,窗口现在有一个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);
      }
    });
    
    Router.configure({
      onAfterAction : function () {
        if (Session.get("scrollToTop") == true) {
          jQuery(window).scrollTop(0);
          Session.set("scrollToTop", false);
        }
      }
    });
    

    有人知道吗?

    尝试在链接中添加一个
    单击事件处理程序,并在那里设置一个
    scrollToTop
    会话变量:

    "click a": function(e) {
        Session.set("scrollToTop", true);
        return true;
    }
    
    然后,像这样做:

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

    当然,这是可能的,但在这种情况下,我发现使用会话是错误的。没有javascript解决方案吗/我不知道您是否来自这样一个背景,“会话”意味着您将使用服务器内存来保存信息,但在本例中,它只是意味着您正在创建一个被动变量。Meteor会话变量仅保留在客户端中,不在选项卡之间共享。你最终会了解到这是Meteor中很多事情的最佳解决方案。进一步阅读:没错——我知道Meteor会话,这非常有用——但如果可能的话,我会尽量避免使用会话。把所有事情都安排在会议上是错误的。