Este ejemplo de knockout js funciona así que cuando edita un campo y presiona TAB, se actualizan los datos del modelo de vista y, por lo tanto, el texto debajo de los campos.
¿Cómo puedo cambiar este código para que los datos del modelo de vista se actualicen cada vez que se presione una tecla?
<!doctype html>
<html>
<title>knockout js</title>
<head>
<script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>
<script type="text/javascript">
window.onload= function() {
var viewModel = {
firstName : ko.observable("Jim"),
lastName : ko.observable("Smith")
};
viewModel.fullName = ko.dependentObservable(function () {
return viewModel.firstName() + " " + viewModel.lastName();
});
ko.applyBindings(viewModel);
}
</script>
</head>
<body>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
</body>
</html>
javascript
knockout.js
Edward Tanguay
fuente
fuente
Respuestas:
De la documentación
fuente
afterkeydown
es una mala solución.En la versión 3.2 , simplemente puede usar el enlace textinput. :
Hace dos cosas importantes:
Por lo tanto, no necesita módulos adicionales, controles personalizados y otras cosas.
fuente
Si desea que realice actualizaciones
afterkeydown
"por defecto", puede inyectar elvalueUpdate
enlace en elvalue
controlador de enlace. Solo proporcione una nuevaallBindingsAccessor
para que la use el controlador que incluyaafterkeydown
.Si no se siente cómodo "anulando" el
value
enlace, puede darle un nombre diferente al enlace personalizado y usar ese controlador de enlace.manifestación
Una solución como esta sería adecuada para Knockout versión 2.x. El equipo de Knockout ha desarrollado un enlace más completo para entradas de texto a través del enlace textInput en Knockout versión 3 y superior. Fue diseñado para manejar todos los métodos de entrada de texto para entradas de texto y
textarea
. Incluso manejará la actualización en tiempo real, lo que hace que este enfoque quede obsoleto.fuente
La respuesta de Jeff Mercado es fantástica, pero desafortunadamente se rompió con Knockout 3.
Pero encontré la respuesta sugerida por los desarrolladores de ko mientras trabajaba a través de los cambios de Knockout 3. Vea los comentarios inferiores en https://github.com/knockout/knockout/pull/932 . Su código:
http://jsfiddle.net/mbest/GKJnt/
Editar Ko 3.2.0 ahora tiene una solución más completa con el nuevo enlace "textInput". Ver la respuesta de SalvidorDali
fuente