Ok, ich habe mich seit Stunden mit diesem Problem herumgeschlagen und das Problem auf eine sehr einfache Fiddle
beschränkt >Problem ist, dass wenn ich das typeahead Plugin von twitter bootstrap für eine Texteingabe verwende und eine Auswahl mache, der Wert im KnockoutJS ViewModel nicht aktualisiert wird. Ich weiß, ich könnte es hacken, um zu arbeiten, aber da muss etwas sein, das ich hier vermisse.
Grundsätzlich habe ich:
Knockout-Bindung
%Vor%Knockout ViewModel
%Vor%HTML
%Vor%Der Rest des Zeugs kommt einfach von Twitter Bootstrap.
Eine Lösung besteht darin, Ihre updater
-Funktion zu ändern, wo Sie das in der value
-Bindung verwendete Observable abrufen und mit dem Funktionsparameter aktualisieren müssen:
Demo JSFiddle.
Wenn Sie nicht der Autor der Bindung sind, können Sie mit der Option updater
die Funktion updater
Da updater
das ausgewählte Element zurückgeben soll, ist die Syntax nicht so schön.
Demo JSFiddle.
Dieses Updater-Zeug funktionierte nicht für mich, hier ist was
%Vor%Ich bevorzuge es, meine Liste der automatischen Vervollständigungen getrennt von Knockout zu halten. Ich will nur, dass Knockout weiß, wann ein Benutzer tatsächlich einen Wert eingegeben hat.
Dies ist näher an der Methode von user2576666, da Typeaheads benutzerdefinierte Ereignisse verwendet werden , um eine Aktualisierung im Knockout-Modell zu erzwingen, wenn eine Auswahl oder eine automatische Vervollständigung vorliegt. Es erfordert jedoch keine typeahead benutzerdefinierte Bindung, und die Werte müssen nicht in dem Knockout ViewModel gespeichert werden. Dies eröffnet den Spielraum für eine individuell anpassbare Fertigstellung auf der ganzen Linie (z. B. mit Bloodhound ), die unnötig fummelig werden würden, wenn wir versuchen würden, sie im Knockout-Modell zu speichern. Mein ViewModel ist definitiv nicht der richtige Ort, um die Autokomplettierungsoptionen für meinen Anwendungsfall zu speichern (und, ich würde vorschlagen, viele andere - besonders wenn Sie eine potentiell große Liste haben, die eine dynamische Population benötigt). IMO diese Version ist auch einfacher zu verstehen:
%Vor%Ich habe das natürlich als JSFiddle gespeichert:
Tags und Links knockout.js twitter-bootstrap bootstrap-typeahead