2012-05-13 12 views
9

Mogę zmusić moje rekordy do powtórzenia używając foreach, ale ponieważ używam systemu gridowego dla CSS, chcę zgrupować te rekordy po cztery naraz (div class = "column") dla każdego (div class = "row").Jak zdobyć Knockout na foreach grupy

Nie widzę dobrego przykładu, jak owijać każdą z nagranych w ten sposób.

Każda pomoc?

Odpowiedz

18

Nie jestem do końca pewien, czego szukasz, ale możesz grupować ręcznie w ten sposób.

http://jsfiddle.net/madcapnmckay/hFPgT/1/

<div data-bind="foreach: grouped" > 
    <div data-bind="foreach: $data" class="row"> 
     <div class="column" data-bind="text: text"></div> 
    </div> 
</div>  

this.grouped = ko.computed(function() { 
     var rows = [], current = []; 
     rows.push(current); 
     for (var i = 0; i < this.items.length; i += 1) { 
      current.push(this.items[i]); 
      if (((i + 1) % 4) === 0) { 
       current = []; 
       rows.push(current); 
      } 
     } 
     return rows; 
}, this); 

Nadzieja to pomaga.

+0

Dzięki! Działa to doskonale w przypadku tablic statycznych. Ale kiedy używam ko.observableArray dla przedmiotów, nic się nie dzieje. Aktualizacja – Chris

+1

: Zmiana elementów na elementy() naprawiła to. – Chris

+0

Tak, obserwowalnaArray jest po prostu funkcją zawijającą statyczną tablicę, więc wykonanie jej zwraca tablicę statyczną wewnątrz. – madcapnmckay

Powiązane problemy