2016-11-22 16 views
1

knockout.jsでコンボボックスのオプションを無効にしようとしています。それがうまく機能optionsCaptionを使用するとオプションが無効にならない

<select data-bind=" options: myItems, optionsText: 'name', optionsValue: 'id',
optionsAfterRender: setOptionDisable"> </select>

var vm = { myItems: [{ name: 'Item 1', id: 1, disable: ko.observable(false) }, { name: 'Item 3', id: 3, disable: ko.observable(true) }, { name: 'Item 4', id: 4, disable: ko.observable(false) }], setOptionDisable: function(option, item) { ko.applyBindingsToNode(option, { disable: item.disable }, item); } }; ko.applyBindings(vm);

knockout documentationでは1例もあります。 HereはJSFiddleです。

ただし、optionsCaptionを追加すると、バインディングは機能しません。コンボボックスにはキャプションのみが表示されます。 HereはcaptionsOptionを持つJS Fiddleです。

何が起こっていますか?

答えて

0

ノックアウトがキャプションを挿入するとき、キャプションを表示するオプションには値undefinedが使用されます。

これは、アフターレンダリングでは、最初の項目がundefinedになることを意味します。データバインドdisable: undefined.disableを適用できないため、エラーが発生します。

setOptionDisable: function(option, item) { 
    if (!item) return; 
    ko.applyBindingsToNode(option, { 
    disable: item.disable 
    }, item); 
} 
+0

ありがとう:

あなたがundefineddisableプロパティにバインドしようとしているからノックアウトを防止するための余分なチェックが必要になります。それは完璧に働いた。 – rubenfa

関連する問題