value
そのオプション バインディングを利用できるようにするには、どの項目が選択されているかをマークするバインディングも適用する必要があります。次に、questions
配列を、選択した値に基づいてフィルター処理された質問の配列を返す計算されたオブザーバブルにすることができます。
Environment Type: <select id="qEnv" data-bind="value: selectedEnvironment, options: envTypes, optionsCaption: 'Select...', optionsValue: 'envId', optionsText: 'envName'"></select>
また、作成したマップされた配列で監視可能な配列を初期化してください。あなたがしたようにそれらを置き換えないでください。(ただし、この場合、配列は変更されていないので問題ありませんでした)
function viewModel() {
var self = this;
// initialize the array with the mapped array
self.envTypes = ko.observableArray(ko.utils.arrayMap(environments, function(item) {
return {
envName: item.Text,
envId: item.EnvId
};
}));
// this tracks our selected environment value
self.selectedEnvironment = ko.observable();
// return a filtered array where the items match the selected environment
self.questions = ko.computed(function () {
return ko.utils.arrayFilter(quests, function (item) {
return item.EnvId == self.selectedEnvironment();
});
});
}
質問配列が空であるかどうかに基づいて質問またはメッセージを表示したい場合があるため、テストを調整する必要があります。
data-bind="if: questions().length"
環境のEnvId
値が重複していたので、それらを更新し、optionsCaption
効果を追加するためにバインディングを追加しました。
更新されたフィドル