2012-03-15 5 views
42

Ho un observableArray nel mio modello di vista. Dopo aver creato il vm, desidero sostituire completamente i dati dello observableArray. Ecco come lo sto facendo:Sostituisci tutti gli elementi in Knockout.js osservabileArray

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


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

Questo sembra funzionare bene, ma ero preoccupato se questo non era corretto e potrebbe portare a perdite di memoria. Qualcuno può conformarsi se questo è il modo preferito per aggiornare uno esistente observableArray assumendo che si desidera sostituire tutti i suoi dati?

Ho notato che observableArray ha un metodo removeAll() e mi chiedevo se fosse necessario chiamarlo per farlo in modo pulito, o se sto bene con quello che sto facendo?

risposta

38

La tecnica che si sta utilizzando è l'approccio consigliato per la sostituzione completa dei dati in un observableArray. Un observableArray è in realtà solo un normale observable con funzioni aggiuntive aggiunte per operazioni di array utili che agiscono sull'array sottostante e le notifiche di trigger.

+3

Quando si dice "l'approccio raccomandato" la mia formazione da rispondere a domande su http://skeptics.stackexchange.com/ calci in. Ti capita di avere la documentazione di supporto/link per la tua dichiarazione? [con rispetto, ovviamente; sei il signor Knockmeout stesso (O;] – Kristopher

-4

Ho trovato che l'approccio raccomandato non funziona in IE9 o inferiore. Invece ho avuto ricreare l'oggetto,

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

Mi chiedo se sia cambiato con le versioni più recenti di Knockout ... Che versione stavi usando? –

+14

Se sostituisci l'intero oggetto, gli osservatori non saranno avvisati, corretto? –