我无法通过计算或pureComputed ko函数更新我的淘汰文本。
<li data-bind="css: { active: route().page === 'login'}">
<a href="#"><label data-bind="text: logOption"></label></a>
</li>
var vm = {
route: params.route,
logOption: ko.pureComputed(function() {
return userFunctions.isLoggedIn(session.user) ? "Log-out" : "Log-in";
})
}
return vm;
绑定正在运行,但是当我登录或注销时它没有更新。
每当我点击元素时,先前的淘汰点击绑定都会更新,因此我知道userFunctions.isLoggedIn(sessions.user)
本身会根据登录/注销状态自行更新。
我希望text:logOption
更新为&#34;登录&#34;或&#34;退出&#34;取决于状态,但似乎淘汰赛没有观察到计算变量中userFunctions.isLoggedIn(sessions.user)
状态的变化?
答案 0 :(得分:1)
嗯,你的方法有很多问题。
首先,处理登录/注销不是客户端的责任。出于这个原因,它不应该是一个链接,而是一个POSTed表单,从那里开始这个过程。
关于您的特定问题,它不起作用,因为您使logOption
依赖的值不是可观察的。 Knockout无法知道某事物的价值已发生变化,除非它是一个可观察的 - 换句话说,计算的可观察量并不像他们每隔0.x秒左右轮询一次价值以查看是否有变化一样。那么,您如何期望它意识到价值发生了变化?
因此,解决方案是您必须实现logOption
值,以便它依赖于observable并更改它的值。这应该是其他类似情况下的解决方案,但就登录管理而言,您应该选择服务器端解决方案。