gpt4 book ai didi

durandal - 如何动态更改 Durandal 路线的可见性?

转载 作者:行者123 更新时间:2023-12-01 18:44:21 26 4
gpt4 key购买 nike

我的 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 是一个没有写入能力的计算,所以它也行不通。如何动态更改导航菜单中路线的可见性?

最佳答案

这是我最后做的。

//ajax call to log user in
.done(function (recievedData) {
if (recievedData == true) {
router.deactivate();
return router.map(config.routesLoggedIn);
} else {
router.deactivate();
return router.map(config.routes);
}
}).done(function() {
router.activate('frames');
return router.navigateTo('#/frames');
});

基本上在我的配置对象中创建了两个路由配置文件。一种用于登录,一种用于未登录。有一个警告。 router.deactivate() 方法是一种非常新的方法,尚未包含在 NuGet 包中。我从 Durandal 的 GitHub 存储库的主分支复制了新路由器的代码。在 Durandal User Group 上有一些关于这个新功能的讨论。 .最终出于安全原因,我可能会从我的服务器提供登录路由。但目前这应该可以正常工作。

关于durandal - 如何动态更改 Durandal 路线的可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16551364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com