0

ルーターに設定されたルートのセットリストの外に移動したい場合、クライアント側のルーティングをエスケープするにはどうすればよいですか?

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" });

これに対する正しい方向へのポインタまたはリードは大歓迎です!

4

1 に答える 1