在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 })