2014-02-18 41 views
0

介紹淘汰賽觀察到的能見度不工作

我有一個簡單的要求:顯示或根據可觀察的價值隱藏2周的div 1。

我有什麼到目前爲止

讓我們開始與HTML(非常簡單的2周的div - 當1可見,另一個是隱藏的):

<div data-bind="visible: ActiveClientSideView == 'aValue'"> 
html content.... 
</div> 
<div data-bind="visible: ActiveClientSideView != 'aValue'"> 
html content.... 
</div> 

在我的ViewModel我有以下內容:

self.ActiveClientSideView = ko.observable(); 

除了Ajax調用後,值被更新:

successError: function (result) { 
if (result.Code == "INVALID_ADDRESS") { 
alert("invalid address"); 
self.ActiveClientSideView = "AddressRecommendations"; 
         } 

警報在那裏檢查代碼是否正在觸發,它是。

我期望的是divs可以像更新ActiveClientSideView一樣輕鬆地顯示/隱藏我錯過了什麼?

EDIT(最新INFO):

當頁面初始加載,我可以設置觀察到的值在init程序,能見度正確的調整,這是對後續(後頁面加載事件),例如按鈕點擊,或稍後,可見性不會動態調整。

+0

看看調試技術在這裏http://stackoverflow.com/questions/9261296/any-good-techniques-to-debug-template-binding-faults-for-knockout-js。特別是嘗試將你的模型輸出到一個文本框,並看看你得到了什麼。 –

+0

似乎「ActiveClientSideView」不可觀察,這使得綁定無法與其值同步。 – patryk

回答

3

您應該使用ActiveClientSideView()代替ActiveClientSideViewvisible結合:

<div data-bind="visible: ActiveClientSideView() == 'aValue'"> 
<div data-bind="visible: ActiveClientSideView() != 'aValue'"> 

更新

我添加了一個jsfiddle演示。所有作品都正確。

你也有ajax調用中的錯誤。您錯誤地將值賦給ActiveClientSideView

+0

我以爲是這樣,我會用我最新的發現來更新這個問題。但是,不,這不是解決方案。 –

+0

我已經更新了我的答案。 – alexmac

0

由於ActiveClientSideViewobservable,而不是:

self.ActiveClientSideView = "AddressRecommendations"; 
// no longer an observable and Knockout cannot notify subscribers 

你應該嘗試:

self.ActiveClientSideView("AddressRecommendations"); 
// mutating the value using the observable function - notifying subscribers 

而且(由@Alexander指出的一樣),檢查observable值時,你應首先調用該功能:

<div data-bind="visible: ActiveClientSideView() == 'aValue'"> 
<div data-bind="visible: ActiveClientSideView() != 'aValue'">