【问题标题】:Knockout and checked data-bind淘汰赛和检查数据绑定
【发布时间】:2013-02-19 20:48:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: knockout.js knockout-2.0


    【解决方案1】:

    SelectedYears 是一个ko.observableArray,它本身不是一个数组,即使它公开了Array 的一些方法。但是没有length 属性。要获取实际数组并检索大小,请使用:

    alert(this.SelectedYears().length);
    

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

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

    checked 需要评估为真或假的东西,您可以考虑使用writable computed observable 将复选框绑定到您的SelectedYears 数组。

    【讨论】:

      【解决方案2】:

      试试:

      alert(this.SelectedYears().length);
      

      它是一个 observable,所以你需要把它当做一个来调用。

      【讨论】:

      • 不确定我是否理解您的评论!你说长度为零,所以我指出那是因为你叫错了。
      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2013-02-04
      • 2023-04-05
      • 2013-12-27
      相关资源
      最近更新 更多