2012-06-11 10 views
80

W pliku knockout.js 2.1.0 w szablonie wykorzystującym powiązanie foreach można uzyskać dostęp do indeksu bieżącego elementu za pomocą funkcji $ index(). Czy w zagnieżdżonym powiązaniu foreach istnieje jakiś sposób uzyskania dostępu do indeksu elementu $ parent z szablonu?Indeks dostępu jednostki nadrzędnej w knockout.js

że mam struktury danych tak:

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 
    }, 
    ... 
    ]}; 

Z tym, chcę wydrukować ścieżkę do każdego modelu, za pomocą wskaźników: [TOPMODEL-index submodel-index], tak że wyjście będzie coś takiego:

[0 0] 
[0 1] 
[1 0] 
[2 0] 
[2 1] 
... 

mam związany modeli używając foreach, ale nie mogę dowiedzieć się, jak uzyskać dostęp indeks tOPMODEL w kontekście podmodel. W poniższym przykładzie pokazano podejście, które próbowałem, ale to nie działa, ponieważ nie mogę dowiedzieć się, jak uzyskać dostęp do indeksu rodzic strony $.

<!--ko foreach: topModel --> 
<!--ko foreach: subModel --> 
    [<span data-bind="text: $parent.index()"></span> 
    <span data-bind="text: $index()"></span>] 
<!--/ko--> 
<!--/ko--> 

powinien wypisać: 0 1 0 2 1 0 1 1 1 2 2 0, 2 1, ...

+0

W rzeczywistości nie potrzebujesz tego '()' po '$ index' tam. –

+0

Również, jeśli mógłbyś stworzyć jsfiddle z tym, co masz, to by to ułatwiło. Możesz też opublikować źródło danych i wyświetlić kod modelu. –

+0

Na razie pracuję tylko nad prototypowaniem, więc nie mam dużo więcej niż podany przykład. Jestem jednak otwarty na sugestie wykorzystujące inne podejścia. –

Odpowiedz

165

dostęp do wskaźnika wykorzystania obiektu nadrzędnego

$parentContext.$index() 

zamiast

$parent.index() 
+0

Świetnie! To było na miejscu :) –

+0

Dzięki. Spędziliśmy całe wieki, próbując to znaleźć! – DavidHyogo

+13

Jednak, aby być nadmiernie jawnym w imię bezmyślności, nadal musisz '$ parentContext. $ Index()' z parens. ; ^) Nieco więcej na $ parentContext [tutaj] (http://www.appliness.com/10-things-to-know-about-knockout-js-on-one-one/), fwiw. – ruffin

2

najłatwiej można się dowiedzieć, to pobrać „kontekstu nokaut” dla chrome. To pokazuje, jakie dane są powiązane z jakim elementem, a także pozwala zobaczyć dostępne funkcje/zmienne do tego konkretnego związanego elementu. To niesamowite narzędzie do takich sytuacji.

Powiązane problemy