87 votes

Accès à l'index de $parent dans knockout.js

Dans knockout.js 2.1.0, dans un modèle utilisant la liaison foreach, vous pouvez accéder à l'index de l'élément actuel via la fonction $index(). Dans une liaison foreach imbriquée, existe-t-il un moyen d'accéder à l'index du $parent à partir d'un modèle ?

Disons que j'ai une structure de données comme celle-ci :

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

Avec ceci, je veux imprimer le chemin d'accès à chaque modèle, en utilisant les indices : [topModel-index subModel-index], de sorte que la sortie sera quelque chose comme :

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

J'ai lié les modèles à l'aide de foreach, mais je n'arrive pas à trouver comment accéder à l'index du topModel dans le contexte du subModel. L'exemple suivant montre une approche que j'ai essayée, mais qui ne fonctionne pas, car je n'arrive pas à trouver comment accéder à l'index du référent $parent.

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

Devrait s'imprimer : 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...

182voto

Brett Smith Points 1129

Pour accéder à l'index de l'objet parent, utilisez

$parentContext.$index 

plutôt que

$parent.index()

3voto

Julian Points 432

Le moyen le plus simple de le savoir est de télécharger "knockout context" pour chrome. Cela vous montre quelles données sont liées à quel élément et vous permet également de voir les fonctions/variables disponibles pour cet élément particulier. C'est un outil extraordinaire pour des situations comme celles-ci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X