Ich habe ein ko.observable in meinem Viewmodel, das an einen Eingang angehängt ist. Wenn der Benutzer den Wert dieser Eingabe (pro Zeichen) ändert, führe ich einen AJAX-Aufruf aus, der Vorschläge vom Backend herunterlädt.Wie ignoriere ich Änderungen, die nicht vom Benutzer vorgenommen wurden?
Wenn der Benutzer einen der Vorschläge auswählt, möchte ich die Eingabe mit dem gewählten Wert füllen, aber ohne den AJAX-Anruf zu senden. Aber das Setzen des beobachtbaren Wertes löst immer noch eine Ereignis- und Aufruffunktion aus, die an die textInput
Bindung gebunden ist.
Wie kann ich den beobachtbaren Wert setzen, ohne textInput auszulösen?
Beispielcode:
var name = ko.observable();
name.subscribe(nameChanged);
var nameChanged = function() {
someService.post(name(), success, failure);
}
var someAction = function() {
name("Test"); // I don't want to trigger AJAX call here
}
<input type="text" data-bind="textInput: name" />
Ich endete mit zwei Observablen: name und displayName. Ich habe auch Änderungen abonniert, und wenn man sich ändert * und * ein anderer ist anders, aktualisiert der erste den zweiten. Aber jetzt weiß ich, woher die Änderung kam: Wenn displayName den Namen aktualisiert - vom Benutzer, und wenn der Name den Namen aktualisiert, aus dem Code. Ihre Lösung ist jedoch eleganter. – Spook