9

ノックアウト 2.3.0 ではoptionsAfterRenderバインディングが導入され、オプションを非常に柔軟に変更できるようになりました。

オプションのキャプションを無効にしたいと思います。現時点では、私はやっています

<select data-bind="options: items, optionsCaption:'please select', optionsAfterRender: function(option, item) { ko.applyBindingsToNode(option, {disable: !item}, item); }"></select>

optionsAfterRenderこれは機能しますが、関数をどこにでもコピーして貼り付ける必要があります。カスタム bindingHandler を作成して 1 か所で実行しようとしましたが、問題が発生しています。これはこれまでの私の bindingHandler です:

ko.bindingHandlers.disableOptionsCaption = {
    init: function (element) {

        ko.applyBindingsToNode(element, {
            optionsAfterRender: function (option, item) {

                ko.applyBindingsToNode(option, {
                    disable: !item
                }, item);

            }
        });

    }
};

ここでは、動作中のバージョンと動作していないバージョンを示すフィドルも作成しました。どんな助けでも大歓迎です!

4

1 に答える 1

5

次のように、すべてのバインディングを段階的に適用するのではなく、まとめて適用する必要があります。

HTML

<select data-bind="disableOptionsCaption:{}"></select>  

JS

ko.bindingHandlers.disableOptionsCaption = {
    init: function (element,valueAccessor, allBindingsAccessor, viewModel) {

        ko.applyBindingsToNode(element, {
            options: viewModel.items,
            optionsCaption: 'please select',
            optionsAfterRender: function (option, item) {

                ko.applyBindingsToNode(option, {
                    disable: !item
                }, item);

            }
        });
    }
};
于 2013-07-17T14:11:24.600 に答える