2017-02-22 80 views
0

Как получить $ index второго foreach внутри самого внутреннего foreach, если у нас есть 3 вложенных foreach? $ index дает нам счетчик самого внутреннего foreach, а $ parentContext дает нам счетчик внешнего outeach. А как насчет среднего прохода?

+0

Родительский контекст должен работать для этого - вы можете показать пример, где он не работает для вас? –

+0

Кроме того, что вы должны работать над вами, подумайте об использовании 'as' в привязке foreach, чтобы дать вашему элементу псевдоним типа' foreach: {data: people, as: 'person'} '. Внутренний foreach может ссылаться на родительские элементы по имени, делая все более чистым, чтобы читать, когда вы глубоко вложены. Это отличный пример этого на странице [нокаута foreach] (http://knockoutjs.com/documentation/foreach-binding.html) примерно на полпути вниз. – JNevill

ответ

0

Здесь Вы можете найти подобный вопрос с jsfiddle демо: Getting $index of grand parent in a nested loop

+0

Большое спасибо. Это сработало для меня. Мы можем использовать $ parentContext. $ ParentContext. $ Index(). – Lucifer

1

Вы можете двигаться вверх $parentContext столько раз, сколько вам нравится. Итак: $index()>$parentContext.$index()>$parentContext.$parentContext.$index() ...

Приведенный ниже пример показывает, что

  1. он работает, и
  2. это некрасиво и склонной к ошибкам ...

Лучшее решение заключается в том, чтобы включить (вычисленное) свойство индекса в ваши фактические элементы.

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>

+0

$ parentContext. $ ParentContxt. $ Index() работал для меня. Большое спасибо. Я думал, что $ parentContext дает вам самый внешний контекст foreach, который неверен. Это дает вам контекст всего лишь одного шага внешнего foreach. – Lucifer

 Смежные вопросы

  • Нет связанных вопросов^_^