Sigo teniendo problemas con los problemas de depuración en las plantillas KnockoutJS.
Digamos que quiero vincularme a una propiedad llamada " items
" pero en la plantilla hago un error tipográfico y me vinculo a la propiedad (no existente) " item
".
Usar el depurador de Chrome solo me dice:
"item" is not defined.
¿Existen herramientas, técnicas o estilos de codificación que me ayuden a obtener más información sobre el problema del enlace?
fuente
name
observablename.subscribe(function(newValue) { console.log("name", newValue); });
foreach
embargo, muchas veces quiero ver los datos al lado de mis elementos, como en un escenario, y me resulta más fácil ver en la página dentro del marcado renderizado relevante que tamizar a través de la consola. Solo depende de la situación. Algunos de mis pensamientos aquí: knockmeout.net/2013/06/… . Además, es posible que desee registrar una versión "limpia" en su enlace comoconsole.log(ko.toJS(valueAccessor())
.Si está utilizando Chrome para el desarrollo, hay una extensión realmente excelente (con la que no estoy afiliado) llamada depurador de contexto de Knockoutjs que le muestra el contexto vinculante directamente en el panel Elementos de las Herramientas para desarrolladores.
fuente
Defina un enlaceHandler una vez , en algún lugar de sus archivos de biblioteca de JavaScript.
que simplemente usarlo le gusta esto:
Ventajas
fuente
Encontré otro que puede ser útil. Estaba depurando algunos enlaces e intenté usar el ejemplo de Ryans. Recibí un error de que JSON encontró un bucle circular.
Pero, utilizando este enfoque, se reemplazó el valor de enlace de datos con lo siguiente:
Ahora, si hago clic en el elemento PRE mientras tengo abierta la ventana de depuración de Chrome, obtengo una ventana de variables de alcance muy bien llena.
Encontré una forma un poco mejor para ello:
fuente
Guía paso por paso
>=
icono en la parte inferior izquierda de la barra de herramientas del desarrollador de Chrome, o abriendo la pestaña "Consola" en la barra de herramientas del desarrollador de Chrome, o presionando Ctrl+ Shift+Jko.dataFor($0)
ko.contextFor($0)
¿Qué es esta magia negra?
Este truco es una combinación de la función $ 0- $ 4 de Chrome y los métodos de utilidad de KnockoutJS . En resumen, Chrome recuerda que los elementos que ha seleccionado en la barra de herramientas para desarrolladores de Chrome y expone estos elementos bajo el alias
$0
,$1
,$2
,$3
,$4
. Por lo tanto, cuando hace clic con el botón derecho en un elemento de su navegador y selecciona 'Inspeccionar elemento', este elemento estará disponible automáticamente bajo el alias$0
. Puedes usar este truco con KnockoutJS, AngularJS, jQuery o cualquier otro marco de JavaScript.El otro lado del truco son los métodos de utilidad de KnockoutJS ko.dataFor y ko.contextFor:
ko.dataFor(element)
- devuelve los datos que estaban disponibles para el enlace contra el elementoko.contextFor(element)
- devuelve todo el contexto de enlace que estaba disponible para el elemento DOM.Recuerde, la Consola JavaScript de Chrome es un entorno de tiempo de ejecución de JavaScript totalmente funcional. Esto significa que no está limitado a solo mirar las variables. Puede almacenar la salida
ko.contextFor
y manipular el modelo de vista directamente desde la consola. Intentavar root = ko.contextFor($0).$root; root.addContact();
ver qué pasa :-)¡Feliz depuración!
fuente
Mira una cosa muy simple que uso:
O
Luego, en html, digamos que tenías:
Solo reemplácelo con
Más avanzado:
Disfruta :)
ACTUALIZAR
Otra cosa molesta es cuando intenta vincular a un valor indefinido. Imagine en el ejemplo anterior que el objeto de datos es simplemente {} no {valor: 'algún texto'}. En este caso, tendrás problemas, pero con el siguiente ajuste estarás bien:
fuente
Creé un proyecto github llamado knockthrough.js para ayudar a visualizar estos errores.
https://github.com/JonKragh/knockthrough
Destaca los errores de enlace y proporciona un volcado del contexto de datos en ese nodo.
Puedes jugar con una muestra aquí: http://htmlpreview.github.io/?https://github.com/JonKragh/knockthrough/blob/master/default.htm
Gracias a RP Niemeyer por sus excelentes ejemplos de código Knockout en SO para llevarme a este punto.
fuente
La forma más fácil de ver qué datos se pasan al enlace es soltar los datos en la consola:
Knockout evaluará el valor para el enlace de texto (de hecho, cualquier enlace puede usarse aquí ) y vacía $ data al panel del navegador de la consola.
fuente
Todas las otras respuestas funcionarán muy bien, solo estoy agregando lo que me gusta hacer:
En su vista (suponiendo que ya haya vinculado un ViewModel):
Código de eliminación:
Esto detendrá el código en el depurador
element
yvalueAccessor()
contendrá información valiosa.fuente
Si está desarrollando en Visual Studio e IE, me gusta más,
data-bind="somebinding:(function(){debugger; return bindvalue; })()"
me gusta más que la función echo, ya que irá al script con todos los enlaces en lugar del archivo eval y puede mirar los datos $ context $ (uso esto en Chrome también);fuente
Esto funciona para mi:
fuente