如何在Knockout点击事件后重定向到另一个页面

时间:2013-02-26 17:37:27

标签: knockout.js

多页网站中的每个页面都显示一个注销链接,并绑定到实现身份验证功能和状态的视图模型。这是一个简化:

<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是一个很棒的图书馆。

1 个答案:

答案 0 :(得分:4)

这不是重定向到登录页面的原因:

<a href="login.html" data-bind="click: logout">Logout</a>

是因为我没有在绑定处理程序中返回true来继续事件链:

self.logout = function () {        
    self.authenticated(false);
    return true;
};

解决!