JSFiddle - React, Tailwind, and code Playground
by adiga
HTML
<ul class="list-group" data-bind="foreach: SelectionColumnList">
<li class="list-group-item">
<input type="checkbox" data-bind="checked: IsSelected" />
<span data-bind="text: ColumnName"></span>
</li>
</ul>
<span data-bind="text: selectedItems"></span>
JavaScript
var columns = [{
ColumnID: 1,
ColumnName: "ColumnName 1",
IsSelected: false
}, {
ColumnID: 2,
ColumnName: "ColumnName 2",
IsSelected: true
}];
var viewModel = function() {
var self = this;
self.SelectionColumnList = ko.observableArray([]);
self.selectedItems = ko.computed(() => {
// If you're using ES6 systax
// return self.SelectionColumnList()
// .filter(column => column.IsSelected())
// .map(column => column.ColumnID);
return self.SelectionColumnList()
.filter(function(column) {
return column.IsSelected();
})
.map(function(column) {
return column.ColumnID
});
});
self.selectedItems.subscribe(function() {
console.log(self.selectedItems());
});
}
var dynamicGridViewModel = new viewModel();
columns.forEach(function(columnInfo) {
var selectionInfo = {};
selectionInfo.ColumnID = columnInfo.ColumnID;
selectionInfo.ColumnName = columnInfo.ColumnName;
selectionInfo.IsSelected = ko.observable(columnInfo.IsSelected);
dynamicGridViewModel.SelectionColumnList.push(selectionInfo);
})
ko.applyBindings(dynamicGridViewModel);