Durandal ルートを以下のように構成しました。
var routes = [
....... More Routes Here.....
{
url: 'login',
moduleId: 'viewmodels/login',
name: 'Log In',
visible: true,
caption: 'Log In'
}, {
url: 'logout',
moduleId: 'viewmodels/logout',
name: 'Log Out',
visible: false,
caption: 'Log Out'
}, {
url: 'register',
moduleId: 'viewmodels/register',
name: 'Register',
visible: false,
caption: 'Register'
}];
そして、すべてが期待どおりに機能しています。ログイン時にナビゲーションでログアウト ルートを有効にして、ログイン ボタンを非表示にできるようにしたいと考えています。次のコードを試してみましたが、エラーがスローされていないにもかかわらず、インターフェイス内の可視性は変わりません。
var isLoggedIn = ko.observable(false);
isLoggedIn.subscribe(function (newValue) {
var routes = router.allRoutes();
if (newValue == true) {
for (var k = 0; k < routes.length; k++) {
if (routes[k].url == 'logout') {
routes[k].visible = true;
}
if (routes[k].url == 'login') {
routes[k].visible = false;
}
}
} else {
for (var i = 0; i < routes.length; i++) {
if (routes[i].url == 'logout') {
routes[i].visible = false;
}
if (routes[i].url == 'login') {
routes[i].visible = true;
}
}
}
});
visible は観察可能ではないため、これは機能しないと思います。 isActive は書き込み機能のない計算されたものであるため、どちらも機能しません。ナビゲーション メニューでルートの可視性を動的に変更するにはどうすればよいですか?