I've created a JSFiddle to show a sample of how this can be achieved: http://jsfiddle.net/bxfXd/3509/
Markup:
<div class="outer" data-bind="foreach:itemsGrouped">
<div class="inner">
<!-- ko foreach: $data -->
<div class="main" data-bind="text:$data"></div>
<!-- /ko -->
<div>
</div>
JS:
Array.prototype.chunk = function (chunkSize) {
var array = this;
return [].concat.apply([],
array.map(function (elem, i) {
return i % chunkSize ? [] : [array.slice(i, i + chunkSize)];
}));
}
var SimpleListModel = function(items) {
var self = this;
self.items = ko.observableArray(items);
self.itemsGrouped = ko.computed(function () {
return self.items().chunk(3);
});
};
ko.applyBindings(new SimpleListModel(
["One", "Two", "Three", "Four", "Five", "Six"]));
For reference, the chunk method was taken from here, posted by @ninjagecko