ルーターに設定されたルートのセットリストの外に移動したい場合、クライアント側のルーティングをエスケープするにはどうすればよいですか?
Durandal.js を使用してプロジェクトを作成し、さまざまなエリア内に SPA を作成しました。私が遭遇した問題は、現在のSPAの外に移動して別のSPAに移動したり、SPAではなく単にcshtmlページであるアプリケーション全体のホームページに戻ったりしたい場合です。
私が試みたのは、Durandal の mapUnknownRoutes ハンドラーを使用してインターセプトし、window.location.href を使用してナビゲートすることです。これは機能しますが、アプリケーションのホームページ (「/」) に移動したい場合、ルーターは SPA の「ルート」と一致し、ホームページに移動せず、代わりに SPA のルート ルートに移動します。
この例のエリア ルートは「/spaHome」で、その MVC ルートは次のようになります。
context.MapRoute(
"spaHome_default",
"spaHome/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Durandalルーターをセットアップするために私が行ったことは次のとおりです。
var routes = [
{ route: ['spaHome', ''], moduleId: 'spaHome', title: "spaHome", hash: "#spaHome"},
{ route: 'one/anotherPage', moduleId: 'one/anotherPage', title: "one/anotherPage", hash: "#one/anotherPage"}
];
router.makeRelative({ moduleId: 'viewmodels' });
router.map(routes)
.mapUnknownRoutes(function (instruction) {
utils.navigateToPath(instruction.fragment);
return false;
})
.activate({ pushState: true, root: "/spaHome" });
これに対する正しい方向へのポインタまたはリードは大歓迎です!