2012-05-13 33 views
9

Tôi có thể nhận hồ sơ của mình để lặp lại bằng cách sử dụng foreach, nhưng vì tôi đang sử dụng hệ thống lưới cho CSS, tôi muốn nhóm các bản ghi này cùng một lúc (div class = "column") cho mỗi (div class = "row").Làm thế nào để có được Knockout để nhóm foreach

Tôi không nhìn thấy ví dụ hay về cách quấn từng bản ghi theo cách này.

Bất kỳ trợ giúp nào?

Trả lời

18

Vì vậy, tôi không hoàn toàn chắc chắn bạn đang làm gì nhưng bạn có thể nhóm theo cách thủ công như thế này.

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

Hope this helps.

+0

Cảm ơn! Điều này làm việc tuyệt vời cho các mảng tĩnh. Nhưng khi tôi sử dụng ko.observableArray cho các mục, không có gì xảy ra. Cập nhật – Chris

+1

: Thay đổi các mục thành các mục() đã sửa lỗi đó. – Chris

+0

Đúng, một ObservableArray chỉ là một hàm bao bọc một mảng tĩnh để thực thi nó trả về mảng tĩnh bên trong. – madcapnmckay

Các vấn đề liên quan