在knockoutJS中克隆/复制observalearray的最佳方式是什么



问题真的说明了一切。我想在KnockoutJS中将一个可观察的数组复制到另一个。

要克隆您想要执行的observableArray:

var viewModel = {
    array1: ko.observableArray(["one", "two"]),
    array2: ko.observableArray()
};
viewModel.clone = function() {
   viewModel.array1(viewModel.array2.slice(0));
};

如果你只想做一个副本,那么你会做:

viewModel.array1(viewModel.array2());

第二个例子的问题是底层数组是相同的,所以推到array1或array2会导致两者都有新值(因为它们都指向同一个数组)。

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

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

希望这能帮助

假设你有类似的东西:

modelA { someValues: observableArray(); }
modelB { iWantYourValues: observableArray(); }

你应该能够:

modelB.iWantYourValues(modelA.someValues())

这不是你想要的,但我想为子孙后代添加这个。。。

如果你想克隆一个与原始保持同步的可观察对象(通常是在维护原始对象的同时创建一个抑制/去抖动的克隆),你可以这样做:

const clone = ko.pureComputed(() => original()).extend({ rateLimit: 500 })

最新更新