I だと思います。あなたは、後のバージョンのノックアウトで修正されたバグを経験しています。
それが仕事(とあなたがしようとしたような)すべきである方法:あなたがノックアウトバージョン3.4が含まれている場合
<input name="Test" type="radio" data-bind="checkedValue: true,
checked: isBlue" />Blue
<input name="Test" type="radio" data-bind="checkedValue: false,
checked: isBlue" />No Blue
ko.applyBindings({
isBlue: ko.observable(false)
});
、それが期待どおりに動作:
ko.applyBindings({
isBlue: ko.observable(false)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<label>
<input name="Test" type="radio" data-bind="checkedValue: true, checked: isBlue" /> Blue
</label>
<label>
<input name="Test" type="radio" data-bind="checkedValue: false, checked: isBlue" /> No Blue
</label>
<br />
<strong style="color: green">3.4.0: Does work</strong>
あなたはフィドル(2.1.0)で使用していたバージョンが含まれている場合
、それはしていません:
ko.applyBindings({
isBlue: ko.observable(false)
});
<script src="https://cloud.github.com/downloads/knockout/knockout/knockout-2.1.0.js"></script>
<label>
<input name="Test" type="radio" data-bind="checkedValue: true, checked: isBlue" />Blue
</label>
<label>
<input name="Test" type="radio" data-bind="checkedValue: false, checked: isBlue" />No Blue
</label>
<br />
<strong style="color: red">2.1.0: Does not work</strong>
編集:いくつかのより多くの掘削後:Iドンそれが2.1.0のバグだとは思わない。 checkedValue
はその時点で存在しませんでした!
ソースを見ると、チェックされた値を取得するためのロジックが2.1で非常に異なっていることがわかります。0およびそれ以降のバージョン:2.1.0では
:3.4.0で
if (element.type == "checkbox") {
valueToWrite = element.checked;
} else if ((element.type == "radio") && (element.checked)) {
valueToWrite = element.value;
}
:
var checkedValue = ko.pureComputed(function() {
// Treat "value" like "checkedValue" when it is included with "checked" binding
if (allBindings['has']('checkedValue')) {
return ko.utils.unwrapObservable(allBindings.get('checkedValue'));
} else if (allBindings['has']('value')) {
return ko.utils.unwrapObservable(allBindings.get('value'));
}
return element.value;
});
だから、明確な答えは次のようになります。3.4.0に更新、または作成3.4.0の動作を実装したカスタムチェックバインディング(バージョンの更新によってプロジェクトが中断される場合)
問題を再現するために必要な*すべてのコードを含めると役立ちますn *を質問そのものに入れておくと、このページはjsfiddle rotsまたはjsfiddleへのリンクがダウンしていても有効です。 – Jeroen