2017-03-13 67 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