Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Subscribe to observable array for new or removed entry only

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?

like image 713
Gelin Luo Avatar asked Jan 04 '13 00:01

Gelin Luo


People also ask

How do I subscribe to an array of observables?

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 .

What is a knockout observable?

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.

What is observable array in knockout JS?

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.


1 Answers

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"); 
like image 87
Judah Gabriel Himango Avatar answered Sep 27 '22 18:09

Judah Gabriel Himango