J'ai une page avec un select et un input-box liés à la même valeur. L'idée est que l'on devrait normalement sélectionner une valeur à partir de la sélection, mais l'utilisateur devrait également être en mesure d'entrer une chaîne arbitraire dans la boîte de saisie. Le problème est que si j'entre quelque chose qui n'est pas présent dans la sélection, à cause de la liaison, la valeur est fixée au premier élément de la sélection.
C'est le comportement que je veux obtenir :
L'utilisateur sélectionne une valeur à partir d'une sélection
- La valeur est réglée sur l'élément sélectionné.
- L'entrée est mise à jour avec la valeur sélectionnée.
L'utilisateur saisit du texte dans l'entrée
- La valeur est fixée au texte saisi.
- La sélection ne change pas sauf si La valeur est présente dans la collection des valeurs disponibles.
En d'autres termes, ce que je veux, c'est que le dernier contrôle modifié soit la valeur valide. Mais je veux aussi que les deux contrôles soient à jour tant qu'une valeur donnée est valable pour ce contrôle .
Mon code ressemble à ceci :
js
var viewModel = { Value: ko.observable('1'), Set: ['1', '2', '3'] };
ko.applyBindings(viewModel);
html
<!-- ko if: Set.length > 1 || (Set.length > 0 && Set[0] != '') -->
<select type="text" class="form-control input-small" data-bind="options: Set, value: Value">
</select>
<!-- /ko -->
<input class="form-control input-small" data-bind="value: Value" style="margin-top: 5px;" />
Voici un jsfiddle qui montre comment le code fonctionne actuellement : http://jsfiddle.net/b2RwG/
[Editer]
J'ai trouvé une solution qui fonctionne ( http://jsfiddle.net/b2RwG/2/ ), mais ce n'est vraiment pas joli, et il doit y avoir une meilleure façon de résoudre ce problème.