2014-04-16 51 views
1

在我的项目中,我有一个登录屏幕,然后是几个导航页面和注销。一旦我注销并尝试再次登录,我收到一个错误:未捕获的错误:历史记录已被激活。Durandal-未捕获错误:历史记录已被激活

我应该如何关闭每次登出时的历史记录?

我已经在所有页面中添加了停用方法,并且已经将视图视图模型设置为null。注销时需要注意什么?任何代码示例都会有所帮助。

在main.js我有以下代码:

define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'plugins/router'], 
    function (system, app, viewLocator, router) { 

     system.debug(true); 

     app.configurePlugins({ 
      router: true 
     }); 

     app.start().then(function() { 

      viewLocator.useConvention(); 

      app.setRoot('viewmodels/login'); 

      system.log('Main Module started'); 
     }); 


    }); 

成功登录后,我设置的应用程序根壳。 shell.js中的代码如下:

define(['plugins/router', 'durandal/system', 'durandal/app'], function (router, system, app) { 
    return { 
     title: 'Configuration', 
     router: router, 
     activate: function() { 

      system.log('Configuring routes'); 

      router.map([ 
       { 
        route: '', moduleId: 'viewmodels/home', nav: true, 
        title: 'Home' 
       }, 
       { 
        route: 'a1', moduleId: 'viewmodels/a1', nav: true, 
        title: 'A1' 
       }, 
       { 
        route: 'a2', moduleId: 'viewmodels/a2', nav: true, 
        title: 'a2' 
       } 

      ]).buildNavigationModel(); 

      system.log('Shell view activating'); 


      return router.activate(); 
     }, 

     logout: function() { 
      app.setRoot('viewmodels/login'); 
     }, 

     deactivate: function() { 

      router.deactivate(); 
      router = null; 
      console.log("shell js- deactivate.. "); 
     }, 


    } 
}); 

在方法禁用 - 我将路由器设置为空。

应该做些什么来解决这个问题?

谢谢。

+0

只是想知道,为什么你需要停用路由器,而其他?就我个人而言,我从来没有这样做,文档没有提到在路由器部分停用。查看代码,在'rootRouter.deactivate'函数中出现以下注释:'禁用历史记录,可能是暂时的。在真实应用程序中没有用处,但对单元测试路由器可能有用。' –

+0

考虑在注销时使用'window.location.reload()'。这将从头开始SPA。 – RainerAtSpirit

回答

1

我得到了同样的错误,是的,你似乎必须调用router.deactivate()。这里就是我有我的网页上试图这样做远远类似的事情时:

function login() { 
    router.reset(); 
    router.deactivate(); 
    app.setRoot('viewmodels/shell', 'entrance'); 
} 

没有停用我得到的错误,有了它我不知道。我认为重置或无效的路由器会工作,但没有。

0

我有同样的问题,发现原因是,我打电话.activate()方法绘制的路线后,[我的意思是调用一些activate()哪里比shell.js等。

在夏日,我可以告诉大家,只是删除.activate()如果您有它在任何比shell.js