在knockoutJS中克隆/复制一个observablearray的最好方法是什么?

问题确实如此。 我想复制一个可观察数组到另一个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将导致两个都有新的值(因为他们都指向相同的数组)。

我面临着同样的任务; 克隆一个可观察的数组。 我能弄清楚如何做的唯一方法是将observable转换为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()) 

不完全是你问的,但我想补充这个后代…

如果您想克隆与原始数据保持同步的观察值(通常在保留原始数据的同时创build一个节stream/去抖动克隆),则可以这样做:

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