Dieses Beispiel für Knockout js funktioniert also, wenn Sie ein Feld bearbeiten und die Tabulatortaste drücken, werden die Ansichtsmodelldaten und damit der Text unter den Feldern aktualisiert.
Wie kann ich diesen Code so ändern, dass die Daten des Ansichtsmodells bei jedem Tastendruck aktualisiert werden?
<!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
quelle
quelle
Antworten:
Aus der Dokumentation
quelle
afterkeydown
ist eine schlechte Lösung.In Version 3.2 können Sie einfach die Texteingabebindung verwenden. ::
Es macht zwei wichtige Dinge:
Es sind also keine zusätzlichen Module, benutzerdefinierten Steuerelemente und andere Dinge erforderlich.
quelle
Wenn Sie möchten, dass
afterkeydown
"standardmäßig" Aktualisierungen durchgeführt werden, können Sie dievalueUpdate
Bindung in denvalue
Bindungshandler einfügen. Geben SieallBindingsAccessor
dem Handler einfach ein neues Produkt an, das Folgendes enthältafterkeydown
.Wenn Sie die
value
Bindung nicht "überschreiben" möchten, können Sie der überschreibenden benutzerdefinierten Bindung einen anderen Namen geben und diesen Bindungshandler verwenden.Demo
Eine solche Lösung wäre für Knockout Version 2.x geeignet. Das Knockout-Team hat eine vollständigere Bindung für textähnliche Eingaben durch die textInput- Bindung in Knockout-Version 3 und höher ausgearbeitet . Es wurde entwickelt, um alle Texteingabemethoden für Texteingaben und zu handhaben
textarea
. Es werden sogar Aktualisierungen in Echtzeit durchgeführt, wodurch dieser Ansatz effektiv überholt wird.quelle
Jeff Mercados Antwort ist fantastisch, aber leider mit Knockout 3 gebrochen.
Aber ich fand die Antwort, die von den Ko-Entwicklern vorgeschlagen wurde, als ich Knockout 3-Änderungen durcharbeitete. Siehe die unteren Kommentare unter https://github.com/knockout/knockout/pull/932 . Ihr Code:
http://jsfiddle.net/mbest/GKJnt/
Edit Ko 3.2.0 bietet jetzt eine vollständigere Lösung mit der neuen Bindung "textInput". Siehe SalvidorDalis Antwort
quelle