W knockout.js 2.1.0 w szablonie korzystającym z powiązania foreach można uzyskać dostęp do indeksu bieżącego elementu za pomocą funkcji $ index (). Czy w zagnieżdżonym powiązaniu foreach istnieje sposób uzyskania dostępu do indeksu elementu macierzystego $ parent z szablonu?
Powiedzmy, że mam taką strukturę danych:
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
},
...
]};
W tym celu chcę wydrukować ścieżkę do każdego modelu, używając indeksów: [topModel-index subModel-index], tak aby wynik wyglądał mniej więcej tak:
[0 0]
[0 1]
[1 0]
[2 0]
[2 1]
...
Powiązałem modele przy użyciu foreach, ale nie mogę dowiedzieć się, jak uzyskać dostęp do indeksu topModel w kontekście podModelu. Poniższy przykład pokazuje podejście, które wypróbowałem, ale nie działa, ponieważ nie mogę dowiedzieć się, jak uzyskać dostęp do indeksu strony odsyłającej $ parent.
<!--ko foreach: topModel -->
<!--ko foreach: subModel -->
[<span data-bind="text: $parent.index()"></span>
<span data-bind="text: $index()"></span>]
<!--/ko-->
<!--/ko-->
Należy wydrukować: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...
()
po$index
tam.Odpowiedzi:
aby uzyskać dostęp do indeksu użycia obiektu nadrzędnego
zamiast
źródło
$parentContext.$index()
radzić sobie z parenami. ; ^) Trochę więcej o $ parentContext tutaj , fwiw.$parentContext.$index()
$parentContext.$parentContext.$index()
działa tak, jak można się spodziewać.Najłatwiejszym sposobem, aby się tego dowiedzieć, jest pobranie „kontekstu eliminacji” dla Chrome. To pokazuje, jakie dane są powiązane z jakim elementem, a także pozwala zobaczyć dostępne funkcje / zmienne do tego konkretnego powiązanego elementu. To niesamowite narzędzie w takich sytuacjach.
źródło