Subscribe to observable array for new or removed entry only

前端 未结 6 1056
被撕碎了的回忆
被撕碎了的回忆 2020-12-08 12:39

So yes I can subscribe to an observable array:

vm.myArray = ko.observableArray();
vm.myArray.subscribe(function(newVal){...});

The problem

6条回答
  •  一生所求
    2020-12-08 13:21

    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");
    

提交回复
热议问题