Есть ли способ вручную увеличить свойство ViewModel из нокаут foreach
?Увеличение счетчика в вложенном цикле foreach
Я хочу сделать что-то логически эквивалентно:
var inc = 0;
for (var i = 0; i < 3; i++)
{
for (var j = 0; j < 3; j++)
{
inc++;
alert(inc + ': ' + i + ',' + j); // but write this to the dom
}
}
Я попытался использовать $index
, но это только относится к токовой петле, а не внутренней или родительского цикла.
Массивы могут быть разных размеров, поэтому я не могу просто вычислить $parentContext.$index * [count of child items] + current $index
.
То, что я пытаюсь достичь:
<div data-bind="foreach: Categories">
<div data-bind="foreach: SubCategories" >
<div data-bind="text: [someIncrementer] +': ' + $parent.Category + ',' + $data></div>
<!-- should output:
1: A,1
2: A,2
3: A,3
4: B,1
5: B,3
-->
</div>
</div>
var ViewModel = function()
{
var self = this;
self.Categories = ko.observableArray([
{Category: 'A', SubCategories: [1,2,3]},
{Category: 'B', SubCategories: [1,3]}
]);
}
Это прекрасно работает (для моих нужд). Я могу создать другой метод, чтобы получить текущий инкремент/просто выставить внутренний инкрементер на объект, 'self.Incrementer = 0' – AndrewP
Это не сработает, я думаю, не в реальных сценариях, где есть наблюдаемые в игре. Каждый раз, когда привязка «text» переоценивается (например, всякий раз, когда имя категории будет меняться, если оно будет наблюдаемым), функция «inc» будет вызываться снова, без возврата нумерации обратно в 0. – Jeroen
Правильно, вы бы должны учитывать изменения в вашем массиве. –