I am binding a table in a view using a Knockout observable array (self.data) which is populated by an AJAX call and the Knockout Mapping plugin. The aim is to have the ViewModel as a reusable component.
I need to add in a column to select table rows. I want to do this by adding a boolean isSelected observable property to each item in the self.data observable array using mapping options. This observable property is then used by the self.selectClicked function to push or pop items to the self.selectedItems observable array.
Problem is, I'm not quite sure how to add the isSelected property to each array item.
Here is the code at the moment:
//// NOTE: ko.applyBindings and the AJAX call currently happen outside of this code.
function ViewModel() {
var self = this;
var mapping = {
// Boolean observable property for each array item added here?
};
self.data = ko.observableArray([]);
self.selectedItems = ko.observableArray([]);
self.selectClicked = function (data, event) {
if (event.currentTarget.checked) {
self.selectedItems.push(data);
}
else {
self.selectedItems.pop(data);
}
return true;
};
// AJAX Data is pushed to the self.data observable array through this function
self.addData = function (_data) {
ko.mapping.fromJS(_data, mapping, self.data);
};
}