So yes I can subscribe to an observable array:
vm.myArray = ko.observableArray(); vm.myArray.subscribe(function(newVal){...});
The problem is the newVal
passed to the function is the entire array. Is there anyway I can get only the delta part? Say the added or removed element?
Alternate of forkJoin means you need to subscribe to the array of observables sequencially. merge and concat are the ways to go in this case. In your case, modify your code and use a spread operator at the very beginning of your array of observables when using merge and concat .
Knockout. js defines an important role when we want to detect and respond to changes on one object, we uses the observable. An observable is useful in various scenarios where we are displaying or editing multiple values and require repeated sections of the UI to appear and disappear as items are inserted and deleted.
If you want to detect and respond to changes of a collection of things, use an observableArray . This is useful in many scenarios where you're displaying or editing multiple values and need repeated sections of UI to appear and disappear as items are added and removed.
As of KnockoutJS 3.0, there's an arrayChange subscription option on ko.observableArray.
var myArray = ko.observableArray(["Alpha", "Beta", "Gamma"]); myArray.subscribe(function(changes) { // For this example, we'll just print out the change info console.log(changes); }, null, "arrayChange"); myArray.push("newitem!");
In the above callback, the changes argument will be an array of change objects like this:
[ { index: 3, status: 'added', value: 'newitem!' } ]
For your specific problem, you want to be notified of new or removed items. To implement that using Knockout 3, it'd look like this:
myArray.subscribe(function(changes) { changes.forEach(function(change) { if (change.status === 'added' || change.status === 'deleted') { console.log("Added or removed! The added/removed element is:", change.value); } }); }, null, "arrayChange");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With