Knockout.js Durandal应用程序中的单独登录视图
my Durandal应用程序的DOM结构如下:Knockout.js Durandal应用程序中的单独登录视图,knockout.js,durandal,durandal-2.0,durandal-navigation,Knockout.js,Durandal,Durandal 2.0,Durandal Navigation,my Durandal应用程序的DOM结构如下: //shell.html 这是我的路由器配置的一个片段 router.map([ {路由:“”,模块ID:'viewmodels/dashboard',名称:'dashboard'}, {route:'form',moduleId:'viewmodels/form',name:'form'}, {route:'login',moduleId:'viewmodels/login',name:'login'} ]); 正如您所看到的,我的登录视图
//shell.html
这是我的路由器配置的一个片段
router.map([
{路由:“”,模块ID:'viewmodels/dashboard',名称:'dashboard'},
{route:'form',moduleId:'viewmodels/form',name:'form'},
{route:'login',moduleId:'viewmodels/login',name:'login'}
]);
正如您所看到的,我的登录视图被插入到
中,这是预期的行为。但是,如果我在登录视图上,我需要隐藏标题视图,这是我通过订阅标题视图模型中的路由器配置来实现的:
router.activeInstruction.subscribe(函数(val)){
val.config.name==“登录”?showHeader(false):showHeader(true);
});
但是这感觉有点混乱,DOM对于标题视图仍然在页面中,我真正想做的是,如果我在登录视图中,我只希望登录视图的DOM在那里,就好像我在只有登录视图的单独页面中一样。但到目前为止,我还没有找到一个干净的方法来做这件事。有几件事:
和或如果-绑定。如果情况不好,他们会把里面的东西藏起来
我可以理解你为什么想要一个完全不同的“布局”,而不需要登录视图的DOM的其余部分。但这与单页应用程序的整体理念背道而驰。这也是不必要的。一点聪明的css和数据绑定(可视,如果有)将给你同样的结果,通常提供比完整页面重新加载更好的用户体验。如果您坚持要破坏SPA,请将路由器降低一级:例如,主路由器只知道登录路由和内部路由。内部路由有另一个路由器,它保存所有其他页面。通过这种方式,您可以将通用HTML从shell视图移动到内部视图。感谢您回答这个问题。标题是特定于演示文稿的,因此从安全角度来看,我很高兴。我遇到的问题是,最初呈现登录页面时出现了闪烁。但是我理解你用visible和if绑定和订阅来检查用户是否登录并显示标题的意思。我会试试看。我的意思是,我会保持这个问题的开放性,以防其他人有不同的做法。看起来我只是需要把逻辑正确,一切都安排妥当。谢谢