Knockout JS:计算可观察对象无法更新
Knockout JS: Computed observable failing to update
我无法使用计算或 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
根据状态更新为 "log in" 或 "log out",但似乎 knockout 没有观察到 [= 状态的变化11=] 在计算变量中?
嗯,你的方法有很多问题。
首先,处理 login/logout 不是客户端的责任。因此,它不应是 link,而应是您启动流程的 POSTed 表单。
关于您的特定问题,它不起作用,因为您使 logOption
依赖的值不是可观察的。 Knockout 无法知道某物的值发生了变化,除非它是可观察的——换句话说,计算的可观察值不会像它们每隔 0.x 秒左右轮询一次值以查看是否有改变。那么,您如何期望它意识到值发生了变化?
因此,解决方案是您必须实现 logOption
值,以便它依赖于一个可观察值并更改它的值。这应该是其他类似情况下的解决方案,但就登录管理而言,您应该简单地选择服务器端解决方案。
我无法使用计算或 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
根据状态更新为 "log in" 或 "log out",但似乎 knockout 没有观察到 [= 状态的变化11=] 在计算变量中?
嗯,你的方法有很多问题。
首先,处理 login/logout 不是客户端的责任。因此,它不应是 link,而应是您启动流程的 POSTed 表单。
关于您的特定问题,它不起作用,因为您使 logOption
依赖的值不是可观察的。 Knockout 无法知道某物的值发生了变化,除非它是可观察的——换句话说,计算的可观察值不会像它们每隔 0.x 秒左右轮询一次值以查看是否有改变。那么,您如何期望它意识到值发生了变化?
因此,解决方案是您必须实现 logOption
值,以便它依赖于一个可观察值并更改它的值。这应该是其他类似情况下的解决方案,但就登录管理而言,您应该简单地选择服务器端解决方案。