多页网站中的每个页面都显示一个注销链接,并绑定到实现身份验证功能和状态的视图模型。这是一个简化:
<a href="#" data-bind="click: logout">Logout</a>
...
function ViewModel() {
var self = this;
self.authenticated = ko.observable(true);
self.logout = function () {
self.authenticated(false);
};
};
注销后,我想重定向回网站的登录页面。我知道我可以在注销功能中执行此操作:
self.logout = function () {
self.authenticated(false);
window.location.href = "login.html";
};
但是为了在视图和视图模型之间保持更清晰的分离,我宁愿视图响应视图模型的authenticated属性的更改。我设想这样的东西,虽然这个例子不起作用 - 脚本块没有被隐藏,因此总是会发生重定向:
<div data-bind="ifnot: authenticated()"><script>alert("window.location.href = 'login.html';");</script></div>
那么,我们如何以MVVM方式重定向?我感谢大家的帮助; Knockout是一个很棒的图书馆。
答案 0 :(得分:4)
这不是重定向到登录页面的原因:
<a href="login.html" data-bind="click: logout">Logout</a>
是因为我没有在绑定处理程序中返回true来继续事件链:
self.logout = function () {
self.authenticated(false);
return true;
};
解决!