0

问题:

我的应用程序没有启动;它只是进入一个无限循环。

代码:

我的应用程序开始:

app.start().then(function() {
            //Replace 'viewmodels' in the moduleId with 'views' to locate the view.
            //Look for partial views in a 'views' folder in the root.
            viewLocator.useConvention();

            //configure routing
            router.useConvention();

            router.mapNav('home');
            router.mapNav('intro');
            router.mapNav('error');
            router.mapRoute('set/:id', 'viewmodels/set', 'Set');
            router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder');
            router.mapRoute('api', 'viewmodels/api', 'API Reference');


            app.adaptToDevice();

            app.setRoot('viewmodels/intro');
            //logger.logError('No route found', route, 'main', true);
            /*
            router.handleInvalidRoute = function (route, params) {
                //debugger;
                //router.navigateTo('#/error');
            };
            */
        });

我将根设置为 intro,其中包含一个具有登录功能的简单视图模型:

define(['durandal/app', 'durandal/plugins/router', 'services/dataservice'], function (app, router, dataservice) {
var introViewModel = function () {

    var self = this;
    self.router = router;

    self.logIn = function () {
        app.setRoot('viewmodels/shell');
    };

    self.activate = function () {
        return router.activate('intro');
    };

这里的目标是在用户登录时重新设置应用程序的根目录。知道我做错了什么吗?

4

3 回答 3

1

根据 Rob 在 Google Groups 页面上的回答,以下是一些对我有用的细节,可能对其他人有所帮助:

  • 在 main.js app.start().then(): 将 root 设置为您的登录页面。

  • 登录后,配置您的路由器并为其添加路由。(必须在路由器激活之前添加路由。)这是一个仅检索用户在登录过程中可以访问的路由的机会。

  • 最后,将 app root 设置为 shell,然后使用您指定的默认路由激活路由器。目前,我修改了路由器中的激活功能,以获取一个附加的起始url参数——这样,如果需要,我可以绕过默认页面。

于 2013-06-27T14:46:11.943 回答
0

根据您的回答,第一部分(setroot 登录),我这样做了,但登录页面没有加载,也没有显示错误。

在主要我只是简单地把 app.setRoot('viewmodels/login', 'entrance');

在登录时,我只有一个激活功能:

function activate() {
    return true;
}

这是对的吗?

于 2013-10-10T13:04:39.810 回答
0

Per Rob over on the Google Groups, I just plucked the router from my intro page and ran it in my shell.js, activating the router only once. This seems to tighten things up a bit and the app is working now:

https://groups.google.com/forum/#!topic/durandaljs/RdGpwIm1oOU

于 2013-04-15T16:13:01.263 回答