subscribeArrayChanged with KnockoutJS
HTML
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.3.5/knockout.mapping.js"></script>
<table>
<tbody data-bind="foreach: dataOne">
<tr>
<td data-bind="text: id"></td>
<td> </td>
<td>
<input type="checkbox" data-bind="checked: $root.duplicates.indexOf(name1) !== -1" />
</td>
</tr>
</tbody>
</table>
CSS
.items {
border-bottom: 1px solid blue;
}
JavaScript
var data1 = [{
name1: "one",
id: 1
}, {
name1: "two",
id: 2
}, {
name1: "three",
id: 3
}];
var data2 = [{
name2: "five"
}, {
name2: "two"
}, {
name2: "three"
}];
var viewModel = {
dataOne: ko.observableArray(data1),
dataTwo: ko.observableArray(data2),
duplicates: ko.observableArray()
};
viewModel.dataTwo.push({
name: "four"
}); //add one on the end
var flattenedOne = ko.utils.arrayMap(viewModel.dataOne(), function (item) {
//alert(item.name1);
return item.name1;
});
var flattenedTwo = ko.utils.arrayMap(viewModel.dataTwo(), function (item) {
// alert(item.name2);
return item.name2;
});
var differences = ko.utils.compareArrays(flattenedOne, flattenedTwo);
//return a flat list of differences
ko.utils.arrayForEach(differences, function (difference) {
if (difference.status === 'retained') {
viewModel.duplicates.push(difference.value);
}
});
ko.applyBindings(viewModel);