我有一个带有选择的页面和一个绑定到相同值的输入框。这个想法是通常人们会从选择中选择一个值,但是,用户也应该能够在输入框中输入任意字符串。问题是,如果我输入了选择中不存在的内容,由于绑定,该值被设置为选择中的第一项。
这是我想要实现的行为:
用户从选择中选择值
- 值设置为所选项目。
- 输入用选定的值更新。
用户在输入中输入文本
- 值设置为输入的文本。
- Select 不会改变,除非Value 存在于可用值的集合中。
换句话说,我想要的是最后更改的控件成为有效值。但我也希望这两个控件都是最新的,只要给定值对该控件有效。
我的代码如下所示:
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/),但是它真的不漂亮,必须有更好的方法来解决这个问题。