2013-02-19 126 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