2012-05-13 7 views
9

Puedo hacer que mis registros se repitan usando foreach, pero debido a que estoy usando un sistema de cuadrícula para CSS, quiero agrupar estos registros de cuatro en cuatro (div class = "column") para cada uno (div clase = "fila").Cómo obtener Knockout para agrupar foreach

No veo un buen ejemplo de cómo ajustar cada registro de esta manera.

¿Algún ayuda?

Respuesta

18

Así que no estoy del todo seguro de lo que está buscando, pero podría agrupar manualmente de esta manera.

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

Espero que esto ayude.

+0

Gracias! Esto funciona muy bien para arreglos estáticos. Pero cuando uso ko.observableArray para los elementos, no pasa nada. – Chris

+1

actualización: El cambio de elementos a elementos() lo solucionó. – Chris

+0

Sí, un Array observable es solo una función que envuelve una matriz estática, por lo que al ejecutarla se devuelve la matriz estática interna. – madcapnmckay