Подтвердить что ты не робот

Knockout.js печатает индекс объекта в foreach

Это, вероятно, довольно просто, но я не могу найти его легко. В knockout.js, как бы вы напечатали индекс элемента в наблюдаемом массиве, который вы повторяете, используя привязку foreach?

4b9b3361

Ответ 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);
});

Надеюсь, что это решение может кому-то помочь.