2013-11-15 45 views
2
function getModified(lineData) { 

    var newObject = $.extend(true, {}, lineData);    
    newObject.Lines('test') 

}; 

我已經將可觀察數組擴展到新變量newObject。但是,如果我在newObject中更改了任何內容,則更改也會反映到LineData中。如何創建淘汰賽可觀察陣列/對象的深層副本

總之如何創建不更新lineData的lineData可觀數組的深度副本。如果我修改newObject。

回答

2
ko.utils.clone = function (obj) { 
    var target = new obj.constructor(); 
    for (var prop in obj) { 
     var propVal = obj[prop]; 
     if (ko.isObservable(propVal)) { 
      var val = propVal(); 
      if ($.type(val) == 'object') { 
       target[prop] = ko.utils.clone(val); 
       continue; 
      } 
      target[prop](val); 
     } 
    } 
    return target; 
}; 

這是我的解決方案,希望它有幫助。

+0

您能否介紹一下如何使用您的解決方案?我不太明白如何實際使用這個。 – PrinceTyke

+0

@PrinceTyke在JavaScript文件中,var newObj = ko.utils.clone(obj);那麼newObj是一個全新的對象,並且記得首先將該函數添加到您的JavaScript文件中。 – Teddy