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

时间:2011-06-28 15:50:33

标签: knockout.js

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

4 个答案:

答案 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 })