2012-06-11 10 views
80

In knockout.js 2.1.0, in un modello che utilizza l'associazione foreach, è possibile accedere all'indice dell'elemento corrente tramite la funzione $ index(). In un binding foreach nidificato esiste un modo per accedere all'indice del $ parent da un modello?

Dire che ho una struttura di dati come questo:

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

Con questo, voglio stampare il percorso di ogni modello, utilizzando gli indici: [topmodel-index sottomodello-indice], in modo che l'uscita sarà qualcosa di simile a:

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

ho legato i modelli utilizzando foreach, ma io non riesco a capire come accedere indice della Topmodel nel contesto del sottomodello. L'esempio seguente mostra un approccio che ho provato, ma non funziona, poiché non riesco a capire come accedere all'indice del referrer $ parent.

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

Dovrebbe stampare: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...

+0

In realtà non è necessario che '()' dopo '$ indice' lì. –

+0

Inoltre, se potessi creare un jsfiddle con quello che hai, sarebbe più facile. Oppure pubblica la tua fonte di dati e visualizza il codice del modello. –

+0

Per ora, sto solo lavorando alla prototipazione, quindi non ho molto più dell'esempio dato. Sono aperto a suggerimenti usando altri approcci, però. –

risposta

165

per accedere l'indice di utilizzo dell'oggetto principale

$parentContext.$index() 

piuttosto che

$parent.index() 
+0

Great! Era azzeccato :) –

+0

Grazie. Ho passato solo secoli a cercare di trovarlo! – DavidHyogo

+13

Tuttavia, per essere eccessivamente esplicito in nome dell'essere senza cervello, devi ancora '$ parentContext. $ Index()' con i paren. ; ^) Un po 'di più su $ parentContext [qui] (http://www.appliness.com/10-things-to-know-about-knockout-js-on-day-one/), fwow. – ruffin

2

Il modo più semplice si può scoprire è scaricare "contesto knockout" per Chrome. Questo ti mostra quali dati sono legati a quale elemento e ti permette anche di vedere le funzioni/variabili disponibili a quel particolare elemento associato. È uno strumento straordinario per situazioni come queste.

Problemi correlati