私が取り組んでいるデュランダル アプリケーションには、ユーザーを子ビューに移動させるタブが上部にあるページがあります。これらのタブは完全に機能し、次のように構成されています。
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
代わりにメインの管理ページへの参照のみが履歴に表示され、設定ページについては言及されません。
子ビューが変更されるたびに履歴が更新されないように、私が見逃したことを誰かが知っていますか?