select と input-box が同じ値にバインドされているページがあります。通常は select から値を選択しますが、ユーザーは入力ボックスに任意の文字列を入力できる必要があります。問題は、選択に存在しないものを入力すると、バインドのために値が選択の最初の項目に設定されることです。
これは私が達成したい動作です:
ユーザーがselectから値を選択
- 選択した項目に値が設定されます。
- 選択した値で入力が更新されます。
ユーザーが入力にテキストを入力します
- 値は入力されたテキストに設定されます。
- 使用可能な値のコレクションに Value が存在しない限り、 Select は変更されません。
つまり、最後に変更されたコントロールが有効な値になるようにしたいのです。しかし、指定された値がそのコントロールに対して有効である限り、両方のコントロールを最新の状態にしたいと考えています。
私のコードは次のようになります。
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;" />
コードが現在どのように機能するかを示す jsfiddle は次のとおりです: http://jsfiddle.net/b2RwG/
[編集]有効な解決策 ( http://jsfiddle.net/b2RwG/2/
)
を見つけましたが、実際にはきれいではなく、この問題を解決するためのより良い方法が必要です。