我很想在这种情况下获得所选的复选框:
<div id='main'>
<table>
<tbody data-bind="foreach: Years">
<tr>
<td>
<input type="checkbox" data.bind="checked: $root.SelectedYears"/>
</td>
<td><span data-bind="text: descr" />
</td>
</tr>
</tbody>
</table>
<br>
<input type="button" value="Click!" data-bind="click: count">
<div/>
function vm() {
this.Years =
[
{
code: "2011",
descr: "descr 2011"
},
{
code: "2012",
descr: "descr 2012"
},
{
code: "2013",
descr: "descr 2013"
},
{
code: "2014",
descr: "descr 2014"
}
];
this.SelectedYears = ko.observableArray(this.Years);
count = function()
{
alert(this.SelectedYears.length);
};
return this;
}
ko.applyBindings(new vm());
http://jsfiddle.net/angelobadellino/UXKt9/
当我点击按钮时,我的SelectedYears集合为空。它应该用所选的复选框填充。
你可以帮我理解我错在哪里吗?答案 0 :(得分:2)
SelectedYears
是一个ko.observableArray
,即使它公开Array
的某些方法,它本身不一个数组。但是没有length
属性。要获取实际数组并检索大小,请使用:
alert(this.SelectedYears().length);
但是,您的其余代码可能无法按预期工作,因为您不能将checked
绑定与这样的数组一起使用:
data.bind="checked: $root.SelectedYears"
选中需要评估为true或false的内容,您可以考虑使用writable computed observable将复选框绑定到SelectedYears
数组。
答案 1 :(得分:1)
尝试:
alert(this.SelectedYears().length);
这是一个可观察的,所以你需要把它称为一个。