在我正在处理的 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
to#admin/settings
然后返回,#admin
我只会在历史记录中看到对主 Admin 页面的引用,而没有提及 Settings 页面。
有谁知道我错过了什么会阻止每次子视图更改时更新历史记录?