50 votes

Quel est le meilleur moyen de cloner / copier un tableau observable dans knockoutJS?

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

61voto

RP Niemeyer Points 81663

Pour cloner un observableArray, vous voudrez 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, aussi, si vous appuyez sur array1 ou array2, les deux auront la nouvelle valeur (puisqu'ils pointent tous deux vers le même tableau).

45voto

Garry English Points 1875

J'étais confronté à la même tâche; cloner un tableau observable. La seule raison pour laquelle j'ai pu comprendre comment le faire est de convertir l'observable en objet JS, puis de convertir cet objet en objet observable. La fonction suivante nécessite le plug-in de cartographie 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

1voto

Steven Dickinson Points 318

En supposant que vous ayez quelque chose comme:

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

Tu devrais être capable de:

 modelB.iWantYourValues(modelA.someValues())
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X