JSFiddle - React, Tailwind, and code Playground
HTML
<div data-bind="foreach: Dropdowns">
<label><input type="checkbox" data-bind="checked: checkedObs" />
<span data-bind="text: label"></span></label>
<select data-bind="disable: checkedObs, options: theseOptions, optionsText: 'Name', optionsCaption: 'Select...', value: selectedOption"></select>
</div>
<button data-bind="click: addButton">Add</button>
JavaScript
var dbData = {
tasks: [
{
id: 1,
desc: 'Something'
},
{
id: 2,
desc: 'Something else'
}
],
people: [
{
id: 1,
name: 'Bill' },
{
id: 2,
name: 'John' }
]
}
function Task (item) {
var self = this;
self.Id = ko.observable(item.id);
self.Name = ko.observable(item.desc);
};
function Person (item) {
var self = this;
self.Id = ko.observable(item.id);
self.Name = ko.observable(item.name);
};
function Dropdown (listObs, selectedObs, label) {
var self = this;
self.theseOptions = listObs;
self.selectedOption = selectedObs;
self.label = label;
self.checkedObs = ko.observable(false);
}
function viewModel () {
var self = this;
self.TaskList = ko.observableArray();
self.People = ko.observableArray();
self.SelectedTask = ko.observable();
self.SelectedPerson = ko.observable();
ko.utils.arrayForEach(dbData.people, function (person) {
self.People.push(new Person(person));
});
ko.utils.arrayForEach(dbData.tasks, function (task) {
self.TaskList.push(new Task(task));
});
self.Dropdowns = ko.observableArray();
self.Dropdowns.push(new Dropdown(self.TaskList, self.SelectedTask, 'Tasks'));
self.Dropdowns.push(new Dropdown(self.People, self.SelectedPerson, 'People'));
self.addButton = function () {
alert('Look at your console for the values that are selected');
console.log(self.SelectedTask());
console.log(self.SelectedPerson());
}
}
ko.applyBindings(new viewModel());