为了能够使用该选项绑定,您需要确保您还value
对其应用绑定以标记选择了哪个项目。然后,您可以使questions
数组成为一个计算的 observable,它会根据所选值返回一个过滤问题的数组。
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
绑定以增加效果。
更新的小提琴