2013-02-14 61 views
1

我創建被綁定到一個屬性,這樣一個複選框:淘汰賽JS - 複選框數據綁定

<input type="checkbox" data-bind="checked: hasSurname, enable: verified()"/> 

這工作得很好。我的問題是,我也想,要取消選中該複選框,當用戶沒有通過驗證,那麼接下來我要做的:

<input type="checkbox" data-bind="checked: hasSurname && verified(), enable: verified()"/> 

此選項的正確的行爲,但hasSurname屬性不會改變剩餘的假。

請幫忙嗎?

回答

4

如果表達式的計算結果爲具有「書寫」行爲的觀察值,那麼與值綁定並僅檢查更新了小部件更改狀態時的observable。

如果你想使用一個複雜的表達式,用於讀取(hasSurname()& &驗證())和改變一個簡單的值(僅hasSurname),您將需要一個計算觀察到的一個「寫」回調 - 見http://knockoutjs.com/documentation/computedObservables.html - 特別是關於可寫計算觀測值的部分。

+0

謝謝,我可以做什麼,我想與computedObservables。但是,我認爲這應該是一個簡單的方法,我的意思是,你有兩個複選框是非常常見的,第一個(已驗證)啓用第二個複選框,當第一個未被選中時,第二個應該是禁用和未選中。我做錯了什麼? computedObservables是唯一的方法? – Keetah 2013-02-14 17:36:51

+1

那麼,我想我可以訂閱驗證的observable,並在值爲false時重置hasSurname,並且只在第二個複選框中使用驗證來啓用/禁用它,但我不認爲它會比其他解決方案簡單得多... – Grim 2013-02-14 21:02:16

1

我試圖在數據綁定中使用& &混合的結果。如果我需要這樣的邏輯,我將它封裝在一個計算的可觀察值中。

this.validate1And2 = ko.computed(function() { 
    var result; 
    result = this.hasSurname() && this.verified(); 
    return result; 
}, this); 

看到這個jsFiddle的例子(我相信這是你正在尋找的行爲)。

http://jsfiddle.net/FwUzc/

更新: 我改變了這個例子,它只有2個複選框,並hasSurname值更新當驗證的價值變化。 http://jsfiddle.net/FwUzc/2/