使用浏览器的后退按钮时,Durandal 子视图不会添加到历史记录中并被忽略
Durandal child views not adding to history and being ignored when using the browser's back button
在我正在处理的 Durandal 应用程序中,有一个页面顶部带有选项卡,可将用户带入子视图。这些选项卡工作完美,配置如下:
var childRouter = router.createChildRouter()
.makeRelative({ moduleId: 'viewmodels/admin/sections', fromParent: true })
.map([
{ route: [''], moduleId: 'index', title: 'Admin', nav: false },
{ route: 'settings', moduleId: 'settings', title: 'Settings', nav: true },
...
]).buildNavigationModel();
我还有一个导航功能,每次单击选项卡时都会执行该功能,如下所示:
function navigate(route) {
router.navigate(route.hash, { replace: true, trigger: true });
}
页面的 URL 按预期更新。从默认的管理子视图 (.../#admin
) 转到“设置”选项卡会将 URL 更新为 .../#admin/settings
。然而,问题是尽管指定了 replace: true
,但视图更改似乎并未存储在浏览器历史记录中。
如果我在 #admin
页面上打开一个新的浏览器选项卡并导航到 #admin/settings
页面,浏览器似乎认为在此之前唯一的历史条目是打开新选项卡:
如果我随后完全离开 #admin
部分,浏览器历史记录中确实会记住我所在的最后一个选项卡(在本例中,是我所在的“设置”选项卡),但是没有事先访问过的 #admin
主页面的条目:
如果我从 #admin
转到 #admin/settings
然后再回到 #admin
,我只会在历史记录中看到对主管理页面的引用,而不会提及设置页面。
有谁知道我错过了什么阻止每次子视图更改时更新历史记录?
我发现将 .mapUnknownRoutes()
留空而不是定义要映射的页面可以完全解决问题。
我是这样做的:
.mapUnknownRoutes('not-found', 'not-allowed')
现在我正在这样做:
.mapUnknownRoutes()
似乎没有任何问题('not-found'
和 'not-allowed'
页面仍然可以访问),但现在后退按钮可以按预期工作。
在我正在处理的 Durandal 应用程序中,有一个页面顶部带有选项卡,可将用户带入子视图。这些选项卡工作完美,配置如下:
var childRouter = router.createChildRouter()
.makeRelative({ moduleId: 'viewmodels/admin/sections', fromParent: true })
.map([
{ route: [''], moduleId: 'index', title: 'Admin', nav: false },
{ route: 'settings', moduleId: 'settings', title: 'Settings', nav: true },
...
]).buildNavigationModel();
我还有一个导航功能,每次单击选项卡时都会执行该功能,如下所示:
function navigate(route) {
router.navigate(route.hash, { replace: true, trigger: true });
}
页面的 URL 按预期更新。从默认的管理子视图 (.../#admin
) 转到“设置”选项卡会将 URL 更新为 .../#admin/settings
。然而,问题是尽管指定了 replace: true
,但视图更改似乎并未存储在浏览器历史记录中。
如果我在 #admin
页面上打开一个新的浏览器选项卡并导航到 #admin/settings
页面,浏览器似乎认为在此之前唯一的历史条目是打开新选项卡:
如果我随后完全离开 #admin
部分,浏览器历史记录中确实会记住我所在的最后一个选项卡(在本例中,是我所在的“设置”选项卡),但是没有事先访问过的 #admin
主页面的条目:
如果我从 #admin
转到 #admin/settings
然后再回到 #admin
,我只会在历史记录中看到对主管理页面的引用,而不会提及设置页面。
有谁知道我错过了什么阻止每次子视图更改时更新历史记录?
我发现将 .mapUnknownRoutes()
留空而不是定义要映射的页面可以完全解决问题。
我是这样做的:
.mapUnknownRoutes('not-found', 'not-allowed')
现在我正在这样做:
.mapUnknownRoutes()
似乎没有任何问题('not-found'
和 'not-allowed'
页面仍然可以访问),但现在后退按钮可以按预期工作。