现在最好的选择是使用一个范围函数,它接受一个开始和结束值并返回一个包含这些数字的数组。例如,我使用 underscore 库中的 range 函数。
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>