Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Javascript 防止用户使用主干导航回特定路由_Javascript_Backbone.js_Routes - Fatal编程技术网

Javascript 防止用户使用主干导航回特定路由

Javascript 防止用户使用主干导航回特定路由,javascript,backbone.js,routes,Javascript,Backbone.js,Routes,我是主干网新手,我想用主干网路由器实现一个非常简单的身份验证 在我的应用程序中,我实际上只使用主干网路由器。当我启动应用程序时,我会呈现一个登录视图,并初始化主干路由器(backbone.history.start();) 如果登录成功,我调用router.navigate('main menu',{trigger:true,replace:false})导航到一个新的路由,在那里我呈现主菜单,但当我单击浏览器的后退按钮时,我导航回登录视图 在导航到前一个视图(login视图)之前,我想询问用户

我是主干网新手,我想用主干网路由器实现一个非常简单的身份验证

在我的应用程序中,我实际上只使用主干网路由器。当我启动应用程序时,我会呈现一个登录视图,并初始化主干路由器(backbone.history.start();)

如果登录成功,我调用
router.navigate('main menu',{trigger:true,replace:false})
导航到一个新的路由,在那里我呈现主菜单,但当我单击浏览器的后退按钮时,我导航回登录视图

在导航到前一个视图(login视图)之前,我想询问用户是否希望首先注销,如果注销过程顺利,那么他将被重定向到login视图


我怎样才能做到这一点?我检查了几个其他问题,但答案对于我的用例来说太复杂了。我只是想防止用户在登录后导航回特定视图。

您可以添加一个主干路由来处理登录页面(如果您还没有这样做的话)。一旦点击了该路线,您就可以这样做(伪代码如下所示):


希望这有帮助。

@Dethariel谢谢你的回答。我使用内置的主干路由器成功地实现了某种会话。我从主干.Router execute方法的小示例片段开始,做了一些类似于下面的事情:

var Router = Backbone.Router.extend({
  // define routes and calkbacks
  // ....
  // define routes and calkbacks

  execute: function(callback, args) {
  // execute will be called before the callback for each specific route
  // get the next route in here
     var nextRoute = Backbone.history.fragment;
     if(user.LoggedIn()){
         // check if nextRoute is '#login*'. I could make other checks as well
         if(nextRoute.indexOf('login')>-1)
             prompt('Log out?');
         // else continue routing
         else if (callback) callback.apply(this, args);
     }
     else if (callback) callback.apply(this, args);
  }
});
这是非常小的,我不认为这是最好或安全的方式,但这对我来说是一个很好的起点

var Router = Backbone.Router.extend({
  // define routes and calkbacks
  // ....
  // define routes and calkbacks

  execute: function(callback, args) {
  // execute will be called before the callback for each specific route
  // get the next route in here
     var nextRoute = Backbone.history.fragment;
     if(user.LoggedIn()){
         // check if nextRoute is '#login*'. I could make other checks as well
         if(nextRoute.indexOf('login')>-1)
             prompt('Log out?');
         // else continue routing
         else if (callback) callback.apply(this, args);
     }
     else if (callback) callback.apply(this, args);
  }
});