Quelle est la meilleure façon de cloner / copier un tableau observable dans knockoutJS?

La question dit tout vraiment. Je veux copier un tableau observable dans un autre dans KnockoutJS.

Pour cloner un object observableArray que vous voulez faire:

var viewModel = { array1: ko.observableArray(["one", "two"]), array2: ko.observableArray() }; viewModel.clone = function() { viewModel.array1(viewModel.array2.slice(0)); }; 

Si vous voulez juste faire une copie, alors vous feriez:

 viewModel.array1(viewModel.array2()); 

Le problème avec le deuxième exemple est que le tableau sous-jacent est le même, si bien que pousser vers array1 ou array2 entraînerait une nouvelle valeur (car ils pointent tous deux vers le même tableau).

J’ai été confronté à la même tâche; cloner un tableau observable. La seule façon de comprendre comment le faire est de convertir l’observable en object JS, puis de convertir cet object en object observable. La fonction suivante nécessite le plug-in de mappage KnockoutJS: http://knockoutjs.com/documentation/plugins-mapping.html

 function cloneObservable(observableObject) { return ko.mapping.fromJS(ko.toJS(observableObject)); } 

J’espère que cela t’aides

En supposant que vous avez quelque chose comme:

 modelA { someValues: observableArray(); } modelB { iWantYourValues: observableArray(); } 

Tu devrais être capable de:

 modelB.iWantYourValues(modelA.someValues()) 

Pas exactement ce que vous demandez, mais j’aimerais append ceci pour la postérité …

Si vous voulez cloner une observable qui rest synchronisée avec l’original (le plus souvent pour créer un clone étranglé / bloqué tout en conservant l’original), vous pouvez faire quelque chose comme ceci:

const clone = ko.pureComputed(() => original()).extend({ rateLimit: 500 })