【问题标题】:Knockout cloning does not work with function instances敲除克隆不适用于函数实例
【发布时间】:2014-04-24 12:23:32
【问题描述】:

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

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

【问题讨论】:

  • 您创建了一个数组的 shallow 克隆。因此,每个数组都包含对原始数组所指对象的相同引用。我想你想进行深度克隆......
  • @JeffMercado 是的,你是对的。我更新了我的问题以包含答案。
  • 不,不要那样做,如果您有问题的答案,请将其作为答案发布。

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


【解决方案1】:

回答

参考this answer

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

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

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多