我下面舉個例子: http://jsfiddle.net/jLkxG/6/複選框非布爾值?
的is_checked屬性可以有兩個值:Yes或No.複選框應進行檢查,如果值是yes,並點擊保存的鏈接時,該財產應分配是否則取決於是否選中複選框。
你會如何在knockoutjs中做到這一點?
我下面舉個例子: http://jsfiddle.net/jLkxG/6/複選框非布爾值?
的is_checked屬性可以有兩個值:Yes或No.複選框應進行檢查,如果值是yes,並點擊保存的鏈接時,該財產應分配是否則取決於是否選中複選框。
你會如何在knockoutjs中做到這一點?
除了計算的另一種方法是使用「訂閱」聆聽值的變化。例如,綁定到is_checked並將該值設置爲true或false。然後訂閱該可觀察值並根據需要將另一個屬性設置爲是/否。看到這裏的小提琴:http://jsfiddle.net/johnpapa/jLkxG/8/
HTML
<input type="checkbox" data-bind="checked: checkedvals.is_checked"/>
<label>Test</label><br/>
<pre data-bind="text:displayJS">
</pre>
的JavaScript
var viewModel = (function() {
var self = this;
self.checkedvals = {
is_checked : ko.observable(true),
is_checked_val : ko.observable("Yes")
};
self.checkedvals.is_checked.subscribe(function(){
self.checkedvals.is_checked_val(self.checkedvals.is_checked() ? "Yes" : "No");
});
self.displayJS = ko.computed(function() {
return JSON.stringify(ko.toJS(checkedvals), null, 2);
});
})();
ko.applyBindings(viewModel);
你的第一個問題是,你錯過了你的綁定括號:
<input type="checkbox" value="Yes" data-bind="checked: is_checked() == 'Yes'"/>
現在複選框將覈對無誤的負載。
更大的問題是單擊複選框將不會寫回值。如果將is_checked()更改爲bool,則它將正常工作。所以,如果您有:
self.is_checked = ko.observable(true);
和
data-bind="checked: is_checked"
它會工作。取消選中該框會更新is_checked的值。如果它真的對你很重要,那麼它就是Yes/No而不是True/False,那麼你將不得不編寫一些代碼來將真/假檢查狀態轉換爲Yes/No。有幾種方法可以解決這個問題。我會嘗試一個計算可觀察。看到這裏:http://jsfiddle.net/jLkxG/7/
你鏈接到錯誤的jsfiddle?這似乎與你的問題沒有關係。 – 2012-04-10 19:20:09
固定鏈接。 – firebird 2012-04-10 20:23:59