问题真的说明了一切。我想在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 })