Как получить $ index второго foreach внутри самого внутреннего foreach, если у нас есть 3 вложенных foreach? $ index дает нам счетчик самого внутреннего foreach, а $ parentContext дает нам счетчик внешнего outeach. А как насчет среднего прохода?
ответ
Здесь Вы можете найти подобный вопрос с jsfiddle демо: Getting $index of grand parent in a nested loop
Большое спасибо. Это сработало для меня. Мы можем использовать $ parentContext. $ ParentContext. $ Index(). – Lucifer
Вы можете двигаться вверх $parentContext
столько раз, сколько вам нравится. Итак: $index()
>$parentContext.$index()
>$parentContext.$parentContext.$index()
...
Приведенный ниже пример показывает, что
- он работает, и
- это некрасиво и склонной к ошибкам ...
Лучшее решение заключается в том, чтобы включить (вычисленное) свойство индекса в ваши фактические элементы.
ko.applyBindings({
items: [{
items: [{
items: [1, 2, 3]
},
{
items: [4, 5, 6]
}
]
},
{
items: [{
items: [7, 8, 9],
}, {
items: [0, 1]
}]
}
]
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<ul data-bind="foreach: items">
<li>
<strong data-bind="text: $index()"></strong>
<ul data-bind="foreach: items">
<li>
<strong data-bind="text: [
$parentContext.$index(),
$index()].join('.')"></strong>
<ul data-bind="foreach: items">
<li>
<strong data-bind="text: [
$parentContext.$parentContext.$index(),
$parentContext.$index(),
$index()].join('.')"></strong>
</li>
</ul>
</li>
</ul>
</li>
</ul>
$ parentContext. $ ParentContxt. $ Index() работал для меня. Большое спасибо. Я думал, что $ parentContext дает вам самый внешний контекст foreach, который неверен. Это дает вам контекст всего лишь одного шага внешнего foreach. – Lucifer
Родительский контекст должен работать для этого - вы можете показать пример, где он не работает для вас? –
Кроме того, что вы должны работать над вами, подумайте об использовании 'as' в привязке foreach, чтобы дать вашему элементу псевдоним типа' foreach: {data: people, as: 'person'} '. Внутренний foreach может ссылаться на родительские элементы по имени, делая все более чистым, чтобы читать, когда вы глубоко вложены. Это отличный пример этого на странице [нокаута foreach] (http://knockoutjs.com/documentation/foreach-binding.html) примерно на полпути вниз. – JNevill