2013-02-19 77 views
1

我triyng获取所选复选框,在这种情况下:淘汰赛,并检查数据绑定

<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/

Whene我按一下按钮,我SelectedYears集合为空。它应该填充选定的复选框。

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

回答

2

SelectedYearsko.observableArray,其是未通过本身数组即使它暴露的Array的一些方法。但没有length财产。要获得实际的数组和检索的大小,使用:

alert(this.SelectedYears().length); 

然而,正如你意代码的其余部分可能无法正常工作,因为你不能使用checked用那种阵列结合:

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

检查需要的东西评估为真或假,您可能会考虑writable computed observable将复选框绑定到您的SelectedYears阵列。

1

尝试:

alert(this.SelectedYears().length); 

这是一个可观的,所以你需要调用它作为一个。

+0

它的工作原理,但相当OT – AngeloBad 2013-02-20 08:54:30

+1

不知道我理解你的评论!你说长度为零,所以我指出这是因为你错误地称呼它。 – 2013-02-20 08:57:51