JSFiddle - React, Tailwind, and code Playground

by ipeshev

JavaScript

ko.extenders.isDirty = function(target,option){
         var _obj = ko.toJS(target);
         function getVal(el){
             return typeof option == 'string' && 
                 typeof el == "object" ? el[option] : el;  
         }
         var initialState = getVal(_obj) ;
         var dirty = false;
         target.isDirty = (function(){
             return  function(){ ();return dirty};
          }());
          target.subscribe(function(el){
              console.log(el,"change");
                        if(initialState!=getVal(ko.toJS(el))){
                           dirty = true;
                        }
                        else {
                            dirty = false;
                            
                        }
            });
            return target;
                
}    

var obj = {id:"1",name:"ssss"};
var obj1 = {id:"2",name:"ssss"};
var obj2 = {id:"1",name:"sssssss"};
var obj3 = {id:"3",name:"ssss"};
var p = ko.observableArray([obj,obj1]).extend({'isDirty': 'id'});
console.dir(p);
var v = ko.observable(obj1).extend({'isDirty': 'id'});
var _obs = [p,v];

var isAnyDirty = ko.computed(function(){
       var res = false;
       ko.utils.arrayForEach(_obs,function(el){
           res = res || el.isDirty();
       });
       return res;
});
 
p([obj,obj1]);
console.log(p.isDirty());
setTimeout(function(){
    return;
    console.log(isAnyDirty());
},2000);