问题说的都是真的。我想在KnockoutJS中将一个可观察的数组复制到另一个数组。
答案 0 :(得分:60)
要克隆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将导致两者都具有新值(因为它们都指向同一个数组)。
答案 1 :(得分:45)
我面临同样的任务;克隆一个可观察的数组。我能弄清楚如何做的唯一方法是将observable转换为JS对象,然后将该对象转换为可观察对象。以下函数需要KnockoutJS映射插件: http://knockoutjs.com/documentation/plugins-mapping.html
function cloneObservable(observableObject) {
return ko.mapping.fromJS(ko.toJS(observableObject));
}
希望这有帮助
答案 2 :(得分:1)
假设你有类似的东西:
modelA { someValues: observableArray(); }
modelB { iWantYourValues: observableArray(); }
你应该能够:
modelB.iWantYourValues(modelA.someValues())
答案 3 :(得分:0)
不完全是您所要求的,但我想为后代添加此内容......
如果你想克隆一个与原版保持同步的观察者(最常见的是在保持原文的同时创建一个受限/去抖的克隆),你可以这样做:
const clone = ko.pureComputed(() => original()).extend({ rateLimit: 500 })