knockout data concatenate array knockout.js

knockout.js - data - ¿Cuál es la mejor forma de clonar/copiar un array observable en knockoutJS?



knockout visible (4)

La pregunta lo dice todo realmente. Quiero copiar una matriz observable a otra en KnockoutJS.


Me enfrenté a la misma tarea; para clonar una matriz observable. La única forma en que pude descubrir cómo hacerlo, es convertir lo observable en un objeto JS, y luego convertir ese objeto en un objeto observable. La siguiente función requiere el complemento de asignación KnockoutJS: http://knockoutjs.com/documentation/plugins-mapping.html

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

Espero que esto ayude


No es exactamente lo que estás preguntando, pero me gustaría agregar esto para la posteridad ...

Si desea clonar un elemento observable que permanezca sincronizado con el original (más a menudo para crear un clon acelerado / antirrebote mientras mantiene el original), puede hacer algo como tal:

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


Para clonar un array observable, desearía hacer:

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

Si solo quieres hacer una copia, entonces harías:

viewModel.array1(viewModel.array2());

El problema con el segundo ejemplo es que la matriz subyacente es la misma, por lo que presionar a array1 o array2 resultaría en que ambos tengan el nuevo valor (ya que ambos apuntan a la misma matriz).


Suponiendo que tiene algo como:

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

Deberias ser capaz de:

modelB.iWantYourValues(modelA.someValues())