ノックアウトを使用して選択するとすべてのチェックボックスのチェックを外すために使用する1つのボタンでチェックボックスのグループを作成しようとしています。私はこの機能を他のすべてのチェックボックスを選択/選択解除するチェックボックスで見ましたが、このボタンをラジオボタンにしてチェックを外すことはできませんが、チェックボックスをオンにすると自動的にチェックを外します。ノックアウトを使用してラジオボタンでチェックボックスをオフにした
私の問題は、以下のコードでは、write関数の前にread関数が呼び出されるため、ラジオボタンをクリックすると、チェックボックスがオンになっていることを確認してチェックボックスをクリアします。だから私はそれを更新するためにそれを2度選択する必要があります。
次のように私のコードは次のとおりです。
JS:
function AppViewModel() {
var self = this;
self.fruits = ko.observableArray([
{name : 'Apple', selected : ko.observable(false)},
{name : 'Banana', selected : ko.observable(false)},
{name : 'Coconut', selected : ko.observable(false)}
]);
self.fruitGroup = ko.computed({
read : function() {
var someSelected = false;
var fruitsArray = self.fruits();
fruitsArray.forEach(function(fruit){
if (fruit.selected()) {
someSelected = true;
}
});
return !someSelected;
},
write : function(newState) {
var fruitsArray = self.fruits();
fruitsArray.forEach(function (fruit){
fruit.selected(false);
});
return true;
}
});
}
ko.applyBindings(new AppViewModel());
はHTML:
<input type="radio" data-bind="checked: fruitGroup"/>
<label>None</label>
<hr/>
<div data-bind="foreach: fruits">
<div>
<input type="checkbox" data-bind="checked: selected, attr: {id: name}"/>
<label data-bind="text: name, attr: {for: name}">Fruit</label>
</div>
</div>
http://jsfiddle.net/dp3jngmu/1/
この動作はひどくサポートするラジオボタンで行う必要があります。例えば、
if
データバインドとclick
バインディングを使用して、 "unchecking" ... 'type'属性を' checkbox'に変更すると、それはうまくいくはずです。 – user3297291はい、ラジオボタンではなくチェックボックスで動作しますが、ラジオボタンを好む理由が選択されたときにユーザーがオプションの選択を解除できないようにしたいのです – user2424495