2012-07-31 116 views
2

我想配置一個相當複雜的模型來綁定視圖來使用KnockoutJS。KnockoutJS json對象/可觀察的「可見」綁定不起作用

這是一個問題的標記部分:

<input type="text" data-bind="visible: dialogSelectedCode.HasValue, value: dialogSelectedCodeValue"/> 
<span data-bind="text: ko.toJSON(dialogSelectedCode)"></span> 

輸入要素從未顯示,但我的「調試」跨度顯示的內容

{"Code":"{intInc_G}","HasValue":true} 

什麼是綁定一個可見的正確方法我的輸入情況下,「決定」 - 數據隱藏在JSON對象內?

更新:這是一個相當複雜的fiddle of the problem。要進入問題對話框,請運行小提琴,單擊「添加塊」,然後嘗試在下拉輸入中選擇多個項目(尤其是第一個和第二個項目) - 因爲它們清楚地表明dialogSelectedCode變量確實正在更新。

+0

你能否提供一些鱈魚e(即ViewModel定義) – mreyeros 2012-07-31 19:58:39

+0

現在是巨大的。我會在幾分鐘內找出一個小提示來展示這個問題=) – 2012-07-31 20:00:56

+0

@ MaximV.Pavlov當visisble屬性發生變化時,它需要被觀察。把它放在JSON中將不起作用。 – Tyrsius 2012-07-31 20:02:40

回答

2

我認爲你需要爲HasValue屬性創建一個計算結果,你的綁定dialogSelectedCode.HasValue沒有遵循observable,它會在可觀察的函數上檢查HasValue屬性的方法dialogSelectedCode().HasValue會拋出一個錯誤。創建一個可計算並讓它執行測試works

self.dialogSelectedCodeHasValue = ko.computed(function() { 
    var selectedCode = ko.utils.unwrapObservable(self.dialogSelectedCode); 
    return selectedCode && selectedCode.HasValue; 
}); 
+0

謝謝傑森。我的理解是,它可以按我設置的方式工作,因爲即使.HasValue不是可觀察的,dialogSelectedCode確實是,而且每次選擇drop box項目時,整個值都會發生變化。現在我知道它不能這樣工作。 – 2012-08-01 03:07:31