質問はそれをすべて本当に言っています。 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());
2番目の例の問題は、基になる配列が同じであるため、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 })