2012-05-13 3 views
9

Ich kann meine Datensätze mit foreach wiederholen, aber weil ich ein Grid-System für CSS verwende, möchte ich diese Datensätze zu vier Gruppen zusammenfassen (div class = "column") für jeden (div class = "row").Wie bekomme ich Knockout, um foreach zu gruppieren

Ich sehe kein gutes Beispiel, wie man jeden einzelnen Datensatz auf diese Weise umschließt.

Irgendwelche Hilfe?

Antwort

18

Also ich bin mir nicht ganz sicher, was Sie wollen, aber Sie könnten Sie manuell so gruppieren.

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); 

Hoffnung, das hilft.

+0

Danke! Dies funktioniert hervorragend für statische Arrays. Aber wenn ich ko.observableArray für die Elemente verwende, passiert nichts. – Chris

+1

update: Ändern von Elementen zu Elementen() behoben. – Chris

+0

Ja, ein observableArray ist nur eine Funktion, die ein statisches Array umhüllt, so dass es das statische Array zurückgibt. – madcapnmckay