我想知道为什么在下面的例子中,默认情况下不会检查radiobuttons,即使它们被绑定到初始化为ch
的可观察true
属性。
<div data-bind="foreach : boxList">
<span data-bind="text : name"></span>
<input type="radio" name="ch" value="true" data-bind="checked : ch"/>
</div>
var viewModel = function() {
this.boxList = [
{ name : 'T1', ch : ko.observable("true")},
{ name : 'T2', ch : ko.observable("true")}
];
}
ko.applyBindings(new viewModel());
答案 0 :(得分:1)
因为Knockout假定如果其value
属性与其检查的绑定所连接的observable的值匹配,则检查单选按钮。换句话说,如果您的无线电的值是left
,那么将检查Knockout是否在observable中找到分配给"left"
绑定表达式的值checked: someObservable
。这在docs上进行了详细讨论。
你可以找到你的小提琴here的工作修改。所有发生的事情都是在viewmodel上定义了一个属性:
this.selectedValue = ko.observable('A');
然后在checked
绑定表达式中使用。因此checked
“保留用户的选择”,而value
绑定表达式应指向Knockout用于切换checked
状态的输入字段使用的实际值:
data-bind="checked : $parent.selectedValue, value: value"