Comment créer une auto-remplir la zone de liste déroulante?
Croit-on savoir la meilleure façon de créer une saisie semi-automatique combobox avec knock-out JS modèles?
J'ai le modèle suivant:
<script type="text/html" id="row-template">
<tr>
...
<td>
<select class="list" data-bind="options: SomeViewModelArray,
value: SelectedItem">
</select>
</td>
...
<tr>
</script>
Parfois, cette liste est longue et j'aimerais avoir knock-out jouer gentiment avec peut-être jQuery autocomplete ou de certains droits du code JavaScript, mais ont eu peu de succès.
En outre, jQuery.La saisie semi-automatique nécessite un champ de saisie. Des idées?
Vous devez vous connecter pour publier un commentaire.
Ici est un jQuery UI Autocomplete de liaison que j'ai écrit. Il a pour but de refléter la
options
,optionsText
,optionsValue
,value
liaison paradigme utilisé avec sélectionner les éléments d'un couple d'ajouts (vous pouvez faire une requête pour les options via AJAX et vous pouvez différencier ce qui est affiché dans la zone d'entrée contre ce qui est affiché dans la boîte de sélection apparaît.Vous n'avez pas besoin de fournir toutes les options. Il va choisir les paramètres par défaut pour vous.
Ici est un sample sans la fonctionnalité AJAX: http://jsfiddle.net/rniemeyer/YNCTY/
Voici le même exemple avec un bouton qui lui permet de se comporter plus comme une zone de liste modifiable: http://jsfiddle.net/rniemeyer/PPsRC/
Voici un exemple avec les options récupérées via AJAX: http://jsfiddle.net/rniemeyer/MJQ6g/
Que vous pouvez l'utiliser comme:
Mise à JOUR: je suis maintenant une version de cette liaison, ici: https://github.com/rniemeyer/knockout-jqAutocomplete
vm.anObs().aSubObs
) cela semble être la seule à mettre à jour une copie (par exemple, les changements ne sont pas visibles survm.anObs
). Les liaisons par défaut (par exemple à unselect
) ne semblent pas avoir ces problèmes :-/minLength: 0
à la saisie semi-automatique, puis modifier la ligne de recherche (line103) àautoEl.autocomplete("search", "");
Voici ma solution:
Utilisation:
http://jsfiddle.net/7bRVH/214/
Par rapport à RP, il est très basique, mais peut-être remplit vos besoins.
L'élimination de besoin....
Ces deux solutions sont grandes (avec Niemeyer est beaucoup plus fine), mais ils ont tous les deux oublier l'élimination de la manipulation!
Ils doivent gérer les cessions en détruisant jquery autocomplete (prévenir les fuites de mémoire) avec ceci:
Améliorations mineures,
Tout d'abord voici quelques conseils très utiles, merci à vous tous pour le partage.
J'utilise la version posté par Epstone avec les améliorations suivantes:
Affichage de l'étiquette (au lieu de la valeur) en appuyant sur haut ou vers le bas l'apparence de ce qui peut être fait par la manipulation de la manifestation thématique
À l'aide d'une observable tableau en tant que source de données (au lieu d'un tableau)
http://jsfiddle.net/PpSfR/
Btw, en précisant minLength 0 permet d'afficher les solutions de rechange en déplaçant les touches de direction sans avoir à entrer un texte quelconque.
J'ai essayé Niemeyer solution avec JQuery UI 1.10.x, mais la zone de saisie semi-automatique n'a tout simplement pas se montrer, après quelques recherches, j'ai trouvé une solution de contournement simple ici. Ajouter la règle suivante à la fin de votre jquery-ui.fichier css résout le problème:
J'ai aussi utilisé de knock-out de 3.1.0, donc j'ai dû remplacer ko.dependentObservable(...) avec un ko.calculée(...)
En outre, si votre KO Vue modèle contient une valeur numérique assurez-vous de modifier les opérateurs de comparaison: de === de == et !== pour != , de sorte que le type de conversion est effectuée.
J'espère que cela aide les autres
Fixe la compensation de l'entrée sur le problème de charge pour les RP de la Solution. Même si c'est indirectement une solution, j'ai changé à la fin de la fonction:
à ceci:
Niemeyer solution est grand, cependant je rencontre un problème lorsque vous essayez d'utiliser la saisie semi-automatique à l'intérieur d'un modal. La saisie semi-automatique a été détruit modaux événement close (Erreur non Interceptée: impossible d'appeler des méthodes sur la saisie semi-automatique avant l'initialisation; tenté d'appeler la méthode 'option' ) j'ai corrigé par l'ajout de deux lignes à la liaison de la méthode subscribe:
Je sais que cette question est ancienne, mais j'étais également à la recherche de la solution la plus simple pour notre équipe à l'aide de cette dans un formulaire, et a trouvé que jQuery autocomplete soulève une " autocompleteselect de l'événement.
Cela m'a donné cette idée.
Avec le gestionnaire simplement:
J'ai aimé cette approche, car elle conserve le gestionnaire simple, et elle ne se rattache pas jQuery événements dans mon viewmodel.
Voici un violon avec un tableau au lieu d'une url de la source. Cela fonctionne si vous cliquez sur la zone de texte et également si vous appuyez sur entrée.
https://jsfiddle.net/fbt1772L/3/
Une autre variation sur Epstone de la solution originale.
J'ai essayé de l'utiliser mais également constaté que le modèle de vue a été seulement d'être mis à jour lorsqu'une valeur a été saisi manuellement. La sélection d'une saisie semi-automatique de l'entrée à gauche le modèle de vue avec l'ancienne valeur, ce qui est un peu inquiétant parce que la validation passe - c'est seulement quand vous vous regardez dans la base de données que vous voyez le problème!
La méthode que j'ai utilisé est de connecter l'sélectionnez gestionnaire de jquery composant de l'INTERFACE utilisateur dans le knock-out de liaison de l'init, qui met simplement à jour le knock-out modèle lorsqu'une valeur est choisie. Ce code intègre également les disposer de plomberie de George utiles réponse ci-dessus.
JS:
HTML:
C'est maintenant le travail assez bien. Il est prévu pour fonctionner à l'encontre d'un préchargé tableau de valeurs sur la page plutôt que d'interroger une api.