2013-02-19 4 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/

Я при й нажмите на кнопке, моя коллекция SelectedYears пуста. Вместо этого он должен быть заполнен выбранными флажками.

Вы можете помочь мне понять, где я ошибаюсь?

ответ

2

SelectedYears является ko.observableArray, который не массив сам по себе, даже если он предоставляет некоторые методы Array. Но нет length собственности. Для того, чтобы получить фактический массив и получить размер, используйте:

alert(this.SelectedYears().length); 

Однако остальная часть кода не может работать, как вы хотели, потому что вы не можете использовать checked связывание с массивом так:

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

проверено что-то, что оценивается как истинное или ложное, вы можете использовать writable computed observable, чтобы привязать флажки к вашему массиву SelectedYears.

1

Try:

alert(this.SelectedYears().length); 

Это наблюдаемое, так что вы должны назвать его как единое целое.

+0

Это работает, но довольно OT – AngeloBad

+1

Не уверен, что я понимаю ваш комментарий! Вы сказали, что длина равна нулю, поэтому я указал, что это потому, что вы неправильно ее назвали. –

Смежные вопросы