Cet exemple de knockout js fonctionne donc lorsque vous éditez un champ et appuyez sur TAB, les données du modèle de vue et donc le texte sous les champs sont mis à jour.
Comment puis-je modifier ce code afin que les données de viewmodel soient mises à jour à chaque pression de touche?
<!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
la source
la source
Réponses:
De la documentation
la source
afterkeydown
est une mauvaise solution.Dans la version 3.2, vous pouvez simplement utiliser la liaison d'entrée de texte. :
Il fait deux choses importantes:
Donc pas besoin de modules supplémentaires, de contrôles personnalisés et d'autres choses.
la source
Si vous souhaitez qu'il effectue des mises à jour sur
afterkeydown
«par défaut», vous pouvez injecter lavalueUpdate
liaison dans levalue
gestionnaire de liaison. Fournissez simplement un nouveauallBindingsAccessor
pour le gestionnaire à utiliser qui inclutafterkeydown
.Si vous n'êtes pas à l'aise pour «remplacer» la
value
liaison, vous pouvez attribuer un nom différent à la liaison personnalisée de substitution et utiliser ce gestionnaire de liaison.démo
Une solution comme celle-ci conviendrait à la version 2.x de Knockout. L'équipe Knockout a développé une liaison plus complète pour les entrées de type texte via la liaison textInput dans Knockout version 3 et plus. Il a été conçu pour gérer toutes les méthodes de saisie de texte pour les entrées de texte et
textarea
. Il gérera même la mise à jour en temps réel, ce qui rendra cette approche obsolète.la source
La réponse de Jeff Mercado est fantastique, mais malheureusement rompue avec Knockout 3.
Mais j'ai trouvé la réponse suggérée par les développeurs de ko en travaillant sur les changements de Knockout 3. Voir les commentaires du bas sur https://github.com/knockout/knockout/pull/932 . Leur code:
http://jsfiddle.net/mbest/GKJnt/
Edit Ko 3.2.0 a maintenant une solution plus complète avec la nouvelle liaison "textInput". Voir la réponse de SalvidorDali
la source