我发现了KO和选择绑定的奇怪行为。使用下面的绑定,当我选择" testa"或" testb",KO更改我的选择,导致选择错误的值。绑定文本值时专门出现问题。如果我将绑定更改为Numbers,KO将按预期工作。我怀疑它是KO的一个错误,但是想先在这里发帖,看看是否有人可以确定我是否做错了。
以下是JSFiddle页面的链接,其中包含以下代码。我尝试了所有版本的KO,问题出现在所有版本中:http://jsfiddle.net/ericeschenbach/C5X2U/此外,我在最新版本的FireFox和Chrome中测试了这个问题,所以我不认为这是与浏览器。
HTML:
Fails:
<select name="a" data-bind="value: ValueText, options: AvailableText, selectedOptions: ValueText, optionsText: 'Text', optionsValue: 'Value', optionsCaption: 'All'"></select>
<br/>
Works:
<select name="b" data-bind="value: ValueNum, options: AvailableNum, selectedOptions: ValueNum, optionsText: 'Text', optionsValue: 'Value', optionsCaption: 'All'"></select>
<br/>
JS:
var self = {};
var availableText = [
{ "Text": "hospital north", "Value": "4" },
{ "Text": "hospital south", "Value": "5" },
{ "Text": "hospitalEast", "Value": "1" },
{ "Text": "johns place", "Value": "6" },
{ "Text": "juli", "Value": "8" },
{ "Text": "Piedmont", "Value": "2" },
{ "Text": "quinn2", "Value": "9" },
{ "Text": "test", "Value": "3" },
{ "Text": "testa", "Value": "10" },
{ "Text": "testb", "Value": "18" },
{ "Text": "tim", "Value": "7" }
];
var availableNum = [
{ "Text": "hospital north", "Value": 4 },
{ "Text": "hospital south", "Value": 5 },
{ "Text": "hospitalEast", "Value": 1 },
{ "Text": "johns place", "Value": 6 },
{ "Text": "juli", "Value": 8 },
{ "Text": "Piedmont", "Value": 2 },
{ "Text": "quinn2", "Value": 9 },
{ "Text": "test", "Value": 3 },
{ "Text": "testa", "Value": 10 },
{ "Text": "testb", "Value": 18 },
{ "Text": "tim", "Value": 7 }
];
self.ValueText = ko.observable();
self.ValueNum = ko.observable();
self.AvailableText = ko.observableArray(availableText);
self.AvailableNum = ko.observableArray(availableNum);
ko.applyBindings(self);
答案 0 :(得分:2)
看起来你不应该使用selectedOptions: ValueText
对于多选列表,您可以读取和写入选择状态 使用selectedOptions。从技术上讲,这是一个单独的绑定,所以它 有自己的文档。
此处已更新example
答案 1 :(得分:1)
在处理文本值时,看起来这是淘汰赛选择绑定中的一个错误。这是一个适合您的解决方案。
用此
替换您的选择绑定<select name="a" data-bind="value: ValueText, options: AvailableText, selectedOptions: ValueText, optionsText: 'Text', optionsValue: function(item){ return Number(item.Value); }, optionsCaption: 'All'"></select>
其中
optionsValue: function(item){ return Number(item.Value); }
是修复淘汰赛的神奇之处。