Knockout克隆不适用于函数实例

时间:2014-04-24 04:11:35

标签: javascript knockout.js reference clone ko.observablearray

基本上我读到的内容以及迄今为止用于克隆数组而没有任何引用的内容是这样的:

var clonedArray = ko.observableArray(originalArray().slice(0));

但在以下 example 中,它似乎不起作用:

var field = function(settings){
  var _self = this;
    _self.Id = settings.Id;
    _self.Flag = ko.observable(settings.Flag);
    return _self;
};

var viewModel = function(){
 var _vm = this;

    _vm.fields = ko.observableArray([
        new field({Id: 1, Flag: true}),
        new field({Id: 2, Flag: false})
    ]);

    _vm.fieldsCloned = ko.observableArray(_vm.fields().slice(0));

    return _vm;
};

ko.applyBindings(new viewModel());

1 个答案:

答案 0 :(得分:1)

答案

参考this answer

  

我面临同样的任务;克隆一个可观察的数组。唯一的   为什么我能弄清楚如何做到这一点,就是将observable转换为   JS对象,然后将该对象转换为可观察对象。该   以下函数需要KnockoutJS映射插件:   http://knockoutjs.com/documentation/plugins-mapping.html

function cloneObservable(observableObject) {
    return ko.mapping.fromJS(ko.toJS(observableObject));
}