Recherche…


Vérification du contexte de liaison d'un élément DOM

De nombreux bogues dans les liaisons de données à exclure sont causés par des propriétés non définies dans un modèle de vue. Knockout a deux méthodes pratiques pour récupérer le contexte de liaison d'un élément HTML:

// Returns the binding context to which an HTMLElement is bound
ko.contextFor(element);    

// Returns the viewmodel to which an HTMLElement is bound
// similar to: ko.contextFor(element).$data
ko.dataFor(element);       

Pour trouver rapidement le contexte de liaison d'un élément d'interface utilisateur, voici une astuce pratique:

La plupart des navigateurs modernes stockent l'élément DOM actuellement sélectionné dans une variable globale: $0 ( plus sur ce mécanisme )

  • Cliquez avec le bouton droit sur un élément de votre interface utilisateur et choisissez "inspecter" ou "inspecter l'élément" dans le menu contextuel.
  • tapez ko.dataFor($0) dans la console du développeur et appuyez sur Entrée

Il existe également des plug-ins de navigateur qui peuvent aider à trouver le contexte de l'objet.

Un exemple (essayez-le sur Knockout hello world exemple ):

Un gif montrant comment enregistrer rapidement le contexte de liaison de knock-out pour un élément d'interface utilisateur

Impression d'un contexte de liaison à partir du balisage

Parfois, il est utile d'imprimer une liaison en cours directement à partir du balisage. Une astuce qui permet d'utiliser un élément DOM supplémentaire avec une liaison non existante (KO <3.0), une liaison personnalisée ou une liaison non pertinente telle que uniqueName .

Considérez cet exemple:

<tbody data-bind="foreach: people">
    <tr>
         <td data-bind="text: firstName"></td>
         <td data-bind="text: lastName"></td>
    </tr>
</tbody>

Si l'on veut connaître le contexte de liaison de chaque élément du tableau de personnes, on peut écrire:

<tbody data-bind="foreach: people">
    <span data-bind="uniqueName: console.log($data)"></span>
    <tr>
        <td data-bind="text: firstName"></td>
        <td data-bind="text: lastName"></td>
    </tr>
</tbody>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow