2

我这里提出了一个非常恼人的bug,多数民众赞成:<select> only shows first char of selected option,我需要一种方法来去除显示:无过我的箱子来避免这个错误。有什么建议么?KnockoutJS火灾回调绑定后完成

继承人的结合:

<select data-bind="options: Values, optionsText: 'DisplayNameWithCost', optionsCaption: ControlCaption, selectedOptions: SelectedValues, event: { change: $root.resolveAllAttributeUi }, disable: IsDisabled"></select> 

编辑: 我已经设法找出其原因selectedOptions: SelectedValues是空白的,它不是在IE9任何选择。至于修复我不知道。以下是IE9中的一个示例尝试:http://jsfiddle.net/9CaTa/

+1

你能告诉我你的选择元素?我看到这发生在我正在使用IE的应用程序上,并且我能够通过修改绑定来修复它。 – Arbiter 2012-08-01 20:34:10

+0

@Arbiter - 我已经更新了我的答案 – Ryan 2012-08-01 22:51:00

+1

淘汰赛已经包含了[此修复程序(http://stackoverflow.com/a/6668405/1287183),但也许这是不够你的情况? – 2012-08-01 23:15:38

回答

0

selectedOptions仅用于多选列表。请参阅http://knockoutjs.com/documentation/selectedOptions-binding.html

你可能想使用value结合,而不是:http://jsfiddle.net/mbest/9CaTa/2/

编辑:

selectedOptionsoptionsCaption很好地工作,但你可以把它至少默认选择第一项通过创建自定义绑定一个包装selectedOptions

ko.bindingHandlers.mySelectedOptions = ko.utils.extend({}, ko.bindingHandlers.selectedOptions); 
ko.bindingHandlers.mySelectedOptions.update = function(element) { 
    ko.bindingHandlers.selectedOptions.update.apply(this, arguments); 
    if (element.selectedIndex === -1) 
     element.selectedIndex = 0; 
} 

下面是使用这个绑定你的例子:http://jsfiddle.net/mbest/9CaTa/3/

我注意到,如果我选择了标题,该selected阵列不会被清除。相反,它会有一个undefined项目。如果你不想这样,你可以在你的自定义更新功能,检查它,以及然后清除数组:http://jsfiddle.net/mbest/9CaTa/4/

+0

您是正确的,但是在我使用它的应用程序中,我有一个SelectedValues的集合,可以用于任何控件类型:radio,select,multi-select,复选框etc. – Ryan 2012-08-03 13:28:28

+0

我已经添加了一些关于如何使用'optionsCaption'使'selectedOptions'工作的一些建议。希望它有帮助。 – 2012-08-03 20:03:55

+0

伟大的工作@Michael最好我最终选择了第二个选项 – Ryan 2012-08-03 20:30:39