Durandal-未捕获错误:历史记录已被激活

时间:2014-04-16 06:59:36

标签: jquery twitter-bootstrap durandal

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

如何在每次退出时停用历史记录?

我在所有页面中添加了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.. ");
        },


    }
});

在方法停用时,将路由器设置为空。

如何解决这个问题?

感谢。

2 个答案:

答案 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