В knockout.js 2.1.0 в шаблоне, использующем привязку foreach, вы можете получить доступ к индексу текущего элемента с помощью функции $ index (). Есть ли способ получить доступ к индексу родительского элемента $ из шаблона во вложенной привязке foreach?
Скажем, у меня есть такая структура данных:
var application = {
topModel: [
{
{subModel: [{'foo':'foo'}, { 'bar':'bar'}]}, // this has top:0 and sub:0
{subModel: [{'foo2':'foo2'}, { 'bar2':'bar2'}]} // this has top:0 and sub:1
},
{
{subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:1 sub:0
},
{
{subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:2 sub:0
{subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:2 sub:1
},
...
]};
При этом я хочу напечатать путь к каждой модели, используя индексы: [topModel-index subModel-index], чтобы результат был примерно таким:
[0 0]
[0 1]
[1 0]
[2 0]
[2 1]
...
Я связал модели с помощью foreach, но не могу понять, как получить доступ к индексу topModel в контексте подмодели. В следующем примере показан подход, который я пробовал, но он не работает, поскольку я не могу понять, как получить доступ к индексу источника перехода $ parent.
<!--ko foreach: topModel -->
<!--ko foreach: subModel -->
[<span data-bind="text: $parent.index()"></span>
<span data-bind="text: $index()"></span>]
<!--/ko-->
<!--/ko-->
Следует распечатать: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...
()
после$index
там.Ответы:
для доступа к индексу родительского объекта используйте
скорее, чем
источник
$parentContext.$index()
с пареной. ; ^) Еще немного о $ parentContext здесь , fwiw.$parentContext.$index()
$parentContext.$parentContext.$index()
что тоже работает, как и следовало ожидать.Самый простой способ узнать это - загрузить «контекст выреза» для Chrome. Это показывает, какие данные привязаны к какому элементу, а также позволяет увидеть доступные функции / переменные для этого конкретного привязанного элемента. Это отличный инструмент для подобных ситуаций.
источник