【发布时间】:2016-09-20 08:22:42
【问题描述】:
我正在尝试使用一个按钮创建一组复选框,该按钮用于在使用敲除选择时取消选中所有复选框。我已经看到这个功能带有一个复选框来选择/取消选择所有其他复选框,但我希望这个按钮是一个单选按钮,所以它不能被取消选中,但我希望它在任何复选框被选中时自动取消选中。
我对下面代码的问题是读取函数在写入函数之前被调用,所以当我点击单选按钮时,它会读取一个复选框被选中,然后清除复选框。所以我需要选择它两次才能更新。
我的代码如下:
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>
【问题讨论】:
-
此行为可能与严重支持“取消选中”的单选按钮有关...如果您将
type属性更改为checkbox,它应该可以工作。 -
是的,它确实适用于复选框而不是单选按钮,但我不希望用户在选择该选项时能够取消选择该选项,这就是我更喜欢单选按钮的原因跨度>
标签: knockout.js