2012-03-15 16 views
42

Mam model observableArray w moim modelu widoku. Po utworzeniu vm chciałbym całkowicie zastąpić dane observableArray. Oto jak ja to robię:Zamień wszystkie elementy w widoku Knockout.js obserwowalneArray

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


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

To wydaje się działać prawidłowo, ale był zaniepokojony, czy to było błędne i może prowadzić do wycieków pamięci. Czy ktokolwiek może się dostosować, jeśli jest to preferowany sposób aktualizacji istniejącego observableArray zakładając, że chcesz zastąpić wszystkie swoje dane?

Zauważyłem, że observableArray ma metodę removeAll() i zastanawiałem się, czy to musi być wywołane, aby to zrobić czyściutko, lub jeśli mam się dobrze z tym, co robię?

Odpowiedz

38

Technika, z której korzystasz, jest zalecanym podejściem do całkowitej wymiany danych w urządzeniu observableArray. Numer observableArray jest w rzeczywistości zwykłym observable z dodatkowymi funkcjami dodanymi do przydatnych operacji na tablicach, które działają na podstawie tablicy i wyzwalają powiadomienia.

+3

Kiedy mówisz „zalecana podejście” mój trening z odpowiadając na pytania na http://skeptics.stackexchange.com/ rzutach. Czy stało się wspieranie Documentation/linków Twoje oświadczenie? [oczywiście z szacunkiem; sam jesteś panem Knockmeout (O;) – Kristopher

-4

Okazało się, że zalecane podejście nie działa w IE9 lub niższym. Zamiast tego musiałem odtworzyć obiekt,

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

Zastanawiam się, czy to się zmieniło w nowszych wersjach Knockout ... Jakiej wersji używałeś? –

+14

Jeśli wymienisz cały obiekt, obserwatorzy nie zostaną powiadomieni, prawda? –

Powiązane problemy