当想要在路由器中设置的路由列表之外导航时,如何逃避客户端路由?
我使用 Durandal.js 创建了一个项目,并在不同的区域内创建了 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" });
任何指向正确方向的指针或线索将不胜感激!