Accedi all'indice di $ parent in knockout.js


87

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 annidato, esiste un modo per accedere all'indice di $ parent da un modello?

Supponiamo che io abbia una struttura dati come questa:

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 ciascun modello, usando gli indici: [topModel-index subModel-index], in modo che l'output sarà qualcosa del tipo:

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

Ho associato i modelli utilizzando foreach, ma non riesco a capire come accedere all'indice di topModel nel contesto del subModel. 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, ...


In realtà non ne hai bisogno ()dopo il $indexlì.
Matthew Schinckel,

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

Per ora, sto solo lavorando sulla prototipazione, quindi non ho molto di più dell'esempio fornito. Tuttavia, sono aperto a suggerimenti utilizzando altri approcci.
Jørgen,

Forse descrivi cosa stai cercando di fare, piuttosto che come . Potrebbe esserci un approccio diverso.
Matthew Schinckel,

Grazie. Ho cambiato la mia domanda e spero che sia più chiaro ora?
Jørgen,

Risposte:


185

per accedere all'indice dell'utilizzo dell'oggetto padre

$parentContext.$index()

piuttosto che

$parent.index()

Grazie. Ho appena passato anni a cercare di trovarlo!
DavidHyogo

14
Tuttavia, per essere eccessivamente esplicito in nome della mancanza di cervello, devi ancora fare $parentContext.$index()i conti con i genitori. ; ^) Un po 'di più su $ parentContext qui , fwiw.
ruffin

3
grazie - sicuramente degno di nota, nel contesto di un valore composto dovresti aggiungere il () tuttavia se stavi associando un elemento all'indice $ parentContext. $ come da domanda non ne hai bisogno.
Brett Smith

5
Hai bisogno di parentesi$parentContext.$index()
Jaider

4
Volevo solo aggiungere che $parentContext.$parentContext.$index()funziona come ti aspetteresti.
Ryan Wheale

3

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.