0

オプションの追加や更新など、jquery ui selectmenuプラグインをknockout.jsでうまく機能させようとしています。以下に作業コードがありますが、パフォーマンスはそれほど優れていません。より良い代替手段はありますか。タイムアウトを行っている理由は、配列がまだ選択にバインドされておらず、selectmenu が空であるためです。

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

「ドロップダウンリスト」バインディングを「オプション」バインディングの後に配置する場合、タイムアウトは必要ありませんoptions: speeds, value: selectedSpeed, dropdownlist: {style: 'popup'}。また、投稿した selectmenu リンクによると、オプションが変更されるたびに「destroy」メソッドを呼び出す必要はありません。

パフォーマンスに関する最近の別の質問にコメントしたので、このブログ投稿をご覧ください。

これは、selectmenu バインディング (私が変更したもの) を使用したフィドルで、基礎となる observableArray を操作する 2 つの方法とそのパフォーマンスを示しています: jsfiddle

于 2012-06-30T20:54:25.073 に答える