Это, вероятно, довольно просто, но я не могу найти его легко. В knockout.js, как бы вы напечатали индекс элемента в наблюдаемом массиве, который вы повторяете, используя привязку foreach?
Knockout.js печатает индекс объекта в foreach
Ответ 1
нокаут 2.1 добавил хороший новый вариант $index. Вот пример http://knockoutjs.com/documentation/foreach-binding.html
Ответ 2
Вы не можете. В любом случае, это не так. Я сам использую эту функцию для добавления свойства индекса в объекты ObservableArrays:
function indexSubscribe(array) {
array.subscribe(function() {
for (var i = 0, j = array().length; i < j; i++) {
var item = array()[i];
if (!item.index) {
item.index = ko.observable(i);
} else {
item.index(i);
}
}
});
};
Тогда в моей ViewModel я могу сделать что-то вроде этого:
this.whatevers = ko.observableArray();
indexSubscribe(this.whatevers);
Ответ 3
В приведенном ниже решении может быть запоздалый ответ. Но если ваш предпочтительный выбор с viewmodel
, нижеприведенное решение поможет с последним исправлением.
В соответствии с Knockout 3.1.0
и выше библиотеки имеют простую работу. index
может быть передан как вторичный аргумент arrayForEach
.
var items = ["Mercedes", "Volvo", "BMW"];
ko.utils.arrayForEach(items, function(item, index) {
console.log(item + ' ' + index);
});
Надеюсь, что это решение может кому-то помочь.