La pregunta lo dice todo realmente. Quiero copiar una matriz observable a otra en KnockoutJS.¿Cuál es la mejor forma de clonar/copiar un array observable en knockoutJS?
Respuesta
Para clonar un observableArray que se quiere hacer:
var viewModel = {
array1: ko.observableArray(["one", "two"]),
array2: ko.observableArray()
};
viewModel.clone = function() {
viewModel.array1(viewModel.array2.slice(0));
};
Si quieren para hacer una copia, lo haría:
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 daría como resultado que ambos tengan el nuevo valor (ya que ambos apuntan a la misma matriz).
Asumiendo que tienen algo así como:
modelA { someValues: observableArray(); }
modelB { iWantYourValues: observableArray(); }
Usted debe ser capaz de:
modelB.iWantYourValues(modelA.someValues())
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 KnockoutJS plugin de mapeo: http://knockoutjs.com/documentation/plugins-mapping.html
function cloneObservable(observableObject) {
return ko.mapping.fromJS(ko.toJS(observableObject));
}
espero que esto ayude
Tenga cuidado, esto se confunde con 'ko.computed()', almacena solo el valor, tiene que redefinir 'computado' después del clon. – Anri
@Anri - Gracias por publicar tu comentario ... ¡me ahorró horas! Garry - por favor actualiza la respuesta con esto! – Kevin
Si no desea utilizar el complemento de asignación knockoutJS, otra opción es convertir su objeto a JSON y crear uno nuevo utilizando los datos json analizados. Como no quería incluir el plugin de mapeo ya que solo lo necesito aquí, lo hice: 'self.myObservable (nuevo koModel (JSON.parse (ko.toJSON (oldObservable))))' – Gigi2m02
No es exactamente lo que estás pidiendo, pero me gustaría añadir esto para la posteridad ...
Si Si desea clonar un elemento observable que permanezca sincronizado con el original (lo más a menudo posible para crear un clon acelerado/antirrebotes mientras mantiene el original), puede hacer algo como tal:
const clone = ko.pureComputed(() => original()).extend({ rateLimit: 500 })
- 1. ¿Admite knockoutJS la matriz observable protegida?
- 2. KnockoutJS - Matriz observable de objetos observables
- 3. knockout observable rendimiento de Array
- 4. Actualizando un array observable no actualiza UI
- 5. Knockout.js mapeando un JSON en un array observable
- 6. ¿Cómo obtener una longitud observable de Array?
- 7. ¿Cuál es la mejor forma de convertir ByteString en Int?
- 8. Obteniendo un elemento concreto de un array observable
- 9. ¿Cuál es la mejor forma de generar rangos en MYSQL?
- 10. ¿Cuál es la mejor forma de formatear C# en WordPress?
- 11. ¿Cuál es la mejor manera de hacer observador/observable en Object-C (versión iphone)
- 12. Cuál es la mejor manera de convertir un hash de rubí a un array
- 13. KnockoutJS - Adición de valores calculados a una matriz observable
- 14. Quitar el yo de Observable Array en el knockout JS
- 15. ¿Cuál es la mejor forma de normalización de Unicode?
- 16. ¿Cuál es la mejor forma de precompilar JSP con Ant
- 17. ¿Cuál es la mejor forma de analizar cadenas?
- 18. ¿Cuál es la mejor forma de distribuir aplicaciones Java?
- 19. ¿Cuál es la mejor forma de organizar el código?
- 20. ¿Cuál es la mejor forma de usar NLog con MEF?
- 21. ¿Cuál es la mejor forma de diseñar una clase C#?
- 22. ¿Cuál es la mejor forma de distribuir Lua y bibliotecas?
- 23. ¿Cuál es la mejor forma de convertir enum a string?
- 24. ¿Cuál es la mejor forma de manejar la recursión en smarty?
- 25. ¿Cuál es la mejor/más segura forma de reinstalar Homebrew?
- 26. ¿Cuál es la mejor forma de obtener Contexto?
- 27. ¿Cuál es la mejor forma de ejecutar expresiones matemáticas?
- 28. KnockoutJS observable Arreglar para actualizar cuando se cambia el observable interno
- 29. Knockout JS - Cómo enlazar correctamente un array observable
- 30. ¿Es un EventListener un observable?
Sí, solo quiero una copia de valor de la matriz en lugar de una copia de referencia, por lo que la primera opción debería ser la más adecuada para mi escenario, gracias. – jaffa
En mi experiencia, esto parece copiar por referencia si sus matrices observables están llenas de propiedades observables porque los observables mismos son objetos. Slice copia objetos por referencia. ¿Sabes cómo clonar profundamente las matrices knockout? – PrinceTyke