在我的项目中,我有一个登录屏幕,然后是几个导航页面和注销。一旦我注销并尝试再次登录,我就会收到错误:未捕获错误:历史记录已被激活。
如何在每次退出时停用历史记录?
我在所有页面中添加了deactivate方法,并且已将视图视图模型设置为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');
});
});
成功登录后,我将app root设置为shell。 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 :(得分:1)
我得到了同样的错误,是的,似乎你必须调用router.deactivate()。这是我到目前为止尝试做类似事情时在页面上的内容:
function login() {
router.reset();
router.deactivate();
app.setRoot('viewmodels/shell', 'entrance');
}
如果没有停用,我会收到错误,但是我没有。我认为重置或归零路由器会起作用,但没有。
答案 1 :(得分:0)
我遇到了同样的问题,发现原因是我在映射路线之后调用了.activate()
方法[我的意思是在除 activate()
> shell.js 强>]。
总之,如果你在 shell.js 以外的地方有 .activate()
,我可以告诉删除 jQuery