1

我正在尝试在这种情况下获得选中的复选框:

<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 集合为空。它应该用选中的复选框来填充。

你能帮我理解我错在哪里吗?

4

2 回答 2

2

SelectedYears是 ako.observableArray它本身不是一个数组,即使它公开了Array. 但是没有length财产。要获取实际数组并检索大小,请使用:

alert(this.SelectedYears().length);

但是,您的其余代码可能无法按预期工作,因为您不能将checked绑定与这样的数组一起使用:

data.bind="checked: $root.SelectedYears"

checked 需要评估为真或假的东西,您可能会考虑使用可写的计算 observable将复选框绑定到您的SelectedYears数组。

于 2013-02-19T12:48:47.290 回答
1

尝试:

alert(this.SelectedYears().length);

这是一个可观察的,所以你需要把它称为一个。

于 2013-02-19T12:47:35.510 回答