如何创建knockout可观察数组/对象的深层副本

时间:2013-11-15 08:05:17

标签: javascript jquery knockout.js

function getModified(lineData) {

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

};

我已将可观察数组扩展为新变量newObject。但是,如果我在newObject中更改任何内容,则更改也会反映到LineData。

简而言之,如何创建不会更新lineData的lineData observable数组的深层副本。如果我修改newObject。

1 个答案:

答案 0 :(得分: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;
};

这是我的解决方案,希望它有所帮助。

// obj is your viewModel object.