Несколько вариантов для вас:
Это будет выглядеть так:
//track an index on items in an observableArray
ko.observableArray.fn.indexed = function() {
//whenever the array changes, make one loop to update the index on each
this.subscribe(function(newValue) {
if (newValue) {
var item;
for (var i = 0, j = newValue.length; i < j; i++) {
item = newValue[i];
if (!ko.isObservable(item.$index)) {
item.$index = ko.observable();
}
item.$index(i);
}
}
});
this.valueHasMutated();
return this;
};
Вы должны инициализировать массив observableArray для индексации следующим образом:
this.myArray = ko.observableArray().indexed();
Теперь, когда манипулируют массивом observable, он будет проходить через элементы один раз и исправлять индекс.Это лучше, чем внутри вашего foreach
поиска индекса каждого элемента каждый раз.