Je continue d'avoir des problèmes avec les problèmes de débogage dans les modèles KnockoutJS.
Disons que je veux me lier à une propriété appelée " items
" mais dans le modèle, je fais une faute de frappe et je me lie à la propriété (non existante) " item
".
L'utilisation du débogueur Chrome ne me dit que:
"item" is not defined.
Existe-t-il des outils, des techniques ou des styles de codage qui m'aident à obtenir plus d'informations sur le problème de liaison?
la source
name
c'était un fait observablename.subscribe(function(newValue) { console.log("name", newValue); });
foreach
scénario et je trouve plus facile de voir sur la page dans le balisage rendu approprié que de parcourir la console. Tout dépend de la situation. Un peu plus de mes pensées ici: knockmeout.net/2013/06/… . En outre, vous souhaiterez peut-être enregistrer une version "propre" dans votre liaison commeconsole.log(ko.toJS(valueAccessor())
.Si vous utilisez Chrome pour le développement, il existe une très bonne extension (avec laquelle je ne suis pas affilié) appelée débogueur de contexte Knockoutjs qui vous montre le contexte de liaison directement dans le panneau Éléments des outils de développement.
la source
Définissez un bindingHandler une fois , quelque part dans vos fichiers de bibliothèque JavaScript.
que simplement l'utiliser, il aime ça:
Les avantages
la source
J'en ai trouvé un autre qui peut être utile. Je déboguais quelques liaisons et essayais d'utiliser l'exemple de Ryans. J'ai reçu une erreur indiquant que JSON a trouvé une boucle circulaire.
Mais, en utilisant cette approche, a remplacé la valeur de liaison de données par ce qui suit:
Maintenant, si je clique sur l'élément PRE tout en ouvrant la fenêtre de débogage de chrome, j'obtiens une fenêtre de variables d'étendue bien remplie.
J'ai trouvé un peu mieux pour cela:
la source
Guide étape par étape
>=
icône en bas à gauche de la barre d'outils du développeur Chrome, ou en ouvrant l'onglet "Console" dans la barre d'outils du développeur Chrome, ou en appuyant sur Ctrl+ Shift+Jko.dataFor($0)
ko.contextFor($0)
Quelle est cette magie noire?
Cette astuce est une combinaison de la fonctionnalité $ 0- $ 4 de Chrome et des méthodes utilitaires de KnockoutJS . Bref, Chrome se souvient que les éléments que vous avez sélectionné dans la barre d' outils Chrome Developer et expose ces éléments sous l'alias
$0
,$1
,$2
,$3
,$4
. Ainsi, lorsque vous cliquez avec le bouton droit sur un élément dans votre navigateur et sélectionnez «Inspecter l'élément», cet élément devient automatiquement disponible sous l'alias$0
. Vous pouvez utiliser cette astuce avec KnockoutJS, AngularJS, jQuery ou tout autre framework JavaScript.L'autre côté de l'astuce est les méthodes utilitaires de KnockoutJS ko.dataFor et ko.contextFor:
ko.dataFor(element)
- renvoie les données disponibles pour la liaison avec l'élémentko.contextFor(element)
- renvoie l'intégralité du contexte de liaison qui était disponible pour l'élément DOM.N'oubliez pas que la console JavaScript de Chrome est un environnement d'exécution JavaScript entièrement fonctionnel. Cela signifie que vous n'êtes pas limité à regarder uniquement les variables. Vous pouvez stocker la sortie
ko.contextFor
et manipuler le viewmodel directement depuis la console. Essayez devar root = ko.contextFor($0).$root; root.addContact();
voir ce qui se passe :-)Bon débogage!
la source
Découvrez une chose vraiment simple que j'utilise:
Ou
Ensuite, en html, disons, vous aviez:
Il suffit de le remplacer par
Plus avancé:
Prendre plaisir :)
METTRE À JOUR
Une autre chose ennuyeuse est lorsque vous essayez de vous lier à une valeur indéfinie. Imaginez dans l'exemple ci-dessus que l'objet de données est simplement {} pas {value: 'some text'}. Dans ce cas, vous aurez des ennuis, mais avec le réglage suivant, tout ira bien:
la source
J'ai créé un projet github appelé knockthrough.js pour aider à visualiser ces erreurs.
https://github.com/JonKragh/knockthrough
Il met en évidence les erreurs de liaison et donne un vidage du contexte de données sur ce nœud.
Vous pouvez jouer avec un échantillon ici: http://htmlpreview.github.io/?https://github.com/JonKragh/knockthrough/blob/master/default.htm
Nous remercions RP Niemeyer pour ses excellents échantillons de code Knockout sur SO pour m'amener à ce point.
la source
Le moyen le plus simple de voir quelles données sont transmises à la liaison est de supprimer les données sur la console:
Knockout évaluera la valeur de la liaison de texte ( toute liaison peut être utilisée ici en fait ) et vide les données $ dans le panneau du navigateur de la console.
la source
Toutes les autres réponses fonctionneront très bien, j'ajoute juste ce que j'aime faire:
Selon vous (en supposant que vous avez déjà lié un ViewModel):
Code de coupure:
Cela mettra le code en pause dans le débogueur
element
etvalueAccessor()
contiendra des informations précieuses.la source
Si vous développez dans Visual studio et IE, j'aime plus
data-bind="somebinding:(function(){debugger; return bindvalue; })()"
ça, je l'aime plus que la fonction echo car il ira au script avec toutes les liaisons plutôt que le fichier eval et vous pouvez simplement regarder les données $ context $ (j'utilise cela dans Chrome également);la source
Cela fonctionne pour moi:
la source