2012-03-15 13 views
42

Tengo un observableArray en mi modelo de vista. Después de crear el vm, deseo reemplazar por completo los datos, el observableArray. Así es como yo lo estoy haciendo:Reemplazar todos los elementos en Knockout.js observableArray

//Initial Setup 
var vm = {}; 
vm.roles = ko.observableArray([]); 
ko.applyBindings(vm); 


//....replace array later on.... 
vm.roles(["1", "2"]); 

Esto parece estar funcionando bien, pero yo estaba preocupado si esto era incorrecto y podría conducir a pérdidas de memoria. ¿Puede alguien ajustarse si esta es la forma preferida de actualizar un observableArray existente suponiendo que desea reemplazar todos sus datos?

Me di cuenta de que observableArray tiene un método removeAll() y me preguntaba si era necesario llamar para hacer esto limpiamente, o si estoy bien con lo que estoy haciendo?

Respuesta

38

La técnica que está utilizando es el enfoque recomendado para reemplazar por completo los datos en un observableArray. Un observableArray es en realidad solo un observable normal con funciones adicionales agregadas para operaciones de matriz útiles que actúan en la matriz subyacente y desencadenan notificaciones.

+3

Cuando dice "el enfoque recomendado" mi formación de responder a preguntas sobre http://skeptics.stackexchange.com/ patadas en. ¿Le sucede que tiene la documentación de soporte/enlaces para tu declaración? [con respeto, por supuesto; usted es el Sr. Knockmeout mismo (O;) – Kristopher

-4

Encontré que el enfoque recomendado no funciona en IE9 o inferior. En vez tuve a crear el objeto,

vm.roles = ko.observableArray(["1","2"]) 
+0

Me pregunto si eso ha cambiado con las versiones más nuevas de Knockout ... ¿Qué versión estaba usando? –

+14

Si reemplaza el objeto completo, los observadores no serán notificados, ¿correcto? –

Cuestiones relacionadas