1

我无法使用计算或 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根据状态用“登录”或“注销”进行更新,但似乎淘汰赛没有观察到userFunctions.isLoggedIn(sessions.user)计算变量中状态的变化?

4

1 回答 1

1

嗯,你的方法有很多问题。

首先,处理登录/注销不是客户端的责任。出于这个原因,它不应该是一个链接,而是一个 POSTed 表单,您可以从中启动该过程。

关于您的特定问题,它不起作用,因为您logOption依赖的值不是可观察的。Knockout 无法知道某些东西的值已经改变,除非它是一个 observable - 换句话说,计算的 observable 不会像他们每 0.x 秒左右轮询一次值以查看是否有变化一样工作。那么,您如何期望它意识到价值发生了变化?

因此,解决方案是您必须实现该logOption值,以便它依赖于可观察对象并更改它的值。这应该是其他类似情况下的解决方案,但就登录管理而言,您应该简单地选择服务器端解决方案。

于 2017-03-13T08:23:19.987 回答