2017-03-13 52 views
1

我无法使用可计算或纯粹计算的ko函数更新我的基因敲除文本。Knockout JS:计算可观察性无法更新

<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)的状态变化?

+0

ko.computed而不是pureComputed –

回答

1

那么,你的方法有很多错误的东西。

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

关于您的特定问题,它不起作用,因为您使logOption依赖的值不是可观察的。淘汰赛无法知道某物的价值已经发生了变化,除非它是可观察的 - 换句话说,计算出来的可观测物不会像每隔0.x秒左右轮询一次数值来查看是否有变化一样工作。那么,你如何期望它意识到价值发生了变化?

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

+0

谢谢,我不知道你的意思是通过处理它服务器端 - 我只是想更新标题文本,以反映登录或注销状态。 – SENA

+0

对不起以前编辑过度! ....缺乏可观察性是有道理的!我试图使用userFunctions.isLoggedIn(sessions.user)设置ko.obervable,但直到有人登录它是未定义哪个淘汰赛似乎不想处理¯\ _(ツ)_ /¯ – SENA