KnockoutJS在绑定完成后触发回调

KnockoutJS fire callback after bindings are complete

本文关键字:回调 绑定 KnockoutJS      更新时间:2023-09-26

我有一个非常烦人的bug,它在这里概述:<选择>只显示所选选项的第一个字符,我需要一种方法来删除显示:没有任何框可以避免这个错误。有什么建议吗?

以下是绑定:

<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/

selectedOptions仅用于多选列表。看见http://knockoutjs.com/documentation/selectedOptions-binding.html.

您可能希望使用value绑定:http://jsfiddle.net/mbest/9CaTa/2/

编辑:

selectedOptions不能很好地与optionsCaption配合使用,但您可以通过创建一个封装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/