Лучший выбор сейчас - использовать функцию диапазона, которая принимает начальное и конечное значения и возвращает массив с этими числами. Я, например, использую функцию диапазона в библиотеке underscore .
var numArray = _.range(0, 5); //returns [0, 1, 2, 3, 4]
Используйте это с нокаутом вот так.
<div data-bind="template: { name: 'myTemplate', foreach: _.range(0, 5) }">
</div>
Внутри шаблона вы можете захватить текущее число, используя '$ data', и использовать его как индекс.
<div>Index: <span data-bind="text: $data"></span></div>
<div>My Object Prop: <span data-bind="text: viewModel.MyObjects[$data].MyProp"></span></div>
Если вы хотите выполнить простую итерацию, как в предыдущем примере, вам следует выполнять итерацию по объекту напрямую, а не по подходу индексации массива. Однако, если вам нужно сделать что-то причудливое, эта техника поможет вам.
Например, если вам нужно отобразить список объектов в наборах по 2, вы можете сделать это.
<div data-bind="foreach: _.range(0, viewModel.MyObjects().length, 2)">
<div>
<div data-bind="template: { name: 'myTemplate', data: viewModel.MyObjects()[$data] }"></div>
<div data-bind="template: { name: 'myTemplate', data: viewModel.MyObjects()[$data + 1] }"></div>
</div>
</div>