1

Durandal 子ルーティングを構成しようとしています。親ルーターが担当する魔女の公開セクションがあります。

//main router
return router.map(config.publicRoutes)
        .buildNavigationModel()
        .mapUnknownRoutes('account/login', '#login/')
        .activate();
//public routes
[{ route: 'login', title: 'Login', moduleId: 'account/login', nav: false, hash: '#login/' },
    { route: 'register', title: 'Register', moduleId: 'account/register', nav: false, hash: '#register/' },
    { route: 'reset-password', title: 'Reset password', moduleId: 'account/reset-password', nav: false, hash: '#reset-password/' },
    { route: 'private*details', moduleId: 'private/private-shell', title: 'Application', nav: true, hash: '#private/' }
];

次に、子ルーターがプライベート セクションを担当する必要があります。ユーザーがログインした後、子ルーターのルートをマッピングしています。ユーザーの種類 (管理者、ユーザー) に応じて、適切なルートで子ルーターをアクティブにしています。

//initializing the router from the login view

 var promise = Q.all([private_shell.initRoutes(isAdmin || true)]);
 return promise.then(navigate("#private/silos"));



// child router in private-shell

var privateRouter = router.createChildRouter();
var routes = [];

//method to initialize the proper routes after login
var initRoutes = function (isAdmin) {
    privateRouter.reset().makeRelative({
        moduleId: 'viewmodels/private/',
        fromParent: true
    });
    console.log(privateRouter);
    return privateRouter.map(isAdmin ? config.adminRoutes : config.userRoutes).buildNavigationModel();
};

ルーターが最初に初期化されたときはすべて正常に動作しますが、メイン ルーター (ログイン ビュー) に戻って別のログインが実行されると、子ルーターは相対モジュール ID を 2 回追加します。

最初のログイン後、ルートには正しいモジュール ID 「viewmodels/private/ route 」が含まれますが、2 回目のログインで子ルーターが初期化されると、ルートには moduleId「viewmodels/private/viewmodels/private/ route」が含まれます。

GET http://localhost:7777/App/viewmodels/private/viewmodels/private/silos.js 404 (Not Found)

それがいつあるべきか:

GET http://localhost:7777/App/viewmodels/private/silos.js

何が原因なのか特定できませんでした。何か助けはありますか?

4

1 に答える 1

0

makeRelative 設定オブジェクトのルート プロパティで親ルートを指定してみてはいかがでしょうか。おそらく、リセット呼び出しを明示的にしてみてください。このような:

privateRouter.reset();
privateRouter.makeRelative({
    moduleId: 'viewmodels/private/',
    fromParent: true,
    route: 'viewmodels/private'
});
于 2014-03-06T09:11:00.473 に答える