0

我正在尝试让 jquery ui selectmenu 插件与 knockout.js 配合使用,包括添加选项并对其进行更新。我在下面有工作代码,但性能不是很好。有没有更好的选择。我做超时的原因是因为数组有时还没有绑定到选择并且选择菜单是空的。

https://github.com/fnagel/jquery-ui/wiki/Selectmenu

ko.bindingHandlers.dropdownlist = {
        update: function (element, valueAccessor, allBindingsAccessor) {

            var values = ko.utils.unwrapObservable(valueAccessor());
            var allBindings = allBindingsAccessor();

                if (allBindings.options) {
                    setTimeout(function () {
                        $(element).selectmenu("destroy").selectmenu(values || {});
                    }, 0);
                } else {
                    $(element).selectmenu(values || {});
                }
        }
    };
4

1 回答 1

0

如果将 'dropdownlist' 绑定放在 'options' 绑定之后,则不需要超时,例如options: speeds, value: selectedSpeed, dropdownlist: {style: 'popup'}. 此外,根据您发布的选择菜单链接,每次选项更改时都不需要调用“销毁”方法。

正如我在您最近提出的另一个关于性能的问题中所评论的那样,请查看此博客文章

这是一个使用 selectmenu 绑定(我修改过)的小提琴,演示了两种操作底层 observableArray 的方法及其性能:jsfiddle

于 2012-06-30T20:54:25.073 回答