2013-07-09 15 views
26

Voglio buttare via i dati nel mio observablearray ogni volta che ottengo dati dal mio server.removeAll vs empty an array with [] in knockoutjs

Qual è la differenza di funzionalità tra

self.myArray([]); 

vs

self.myArray.removeAll(); 
+0

Il primo crea un nuovo osservabile e tutti gli abbonamenti a quello vecchio si perdono . – DCoder

+0

@DCoder scusa ho fatto un errore di battitura ... per favore dai un'occhiata di nuovo. – msfanboy

+0

Puoi leggere il codice sorgente di Knockout per vedere come è implementato. Entrambi cancellano l'array, l'unica differenza evidente è ciò che restituiscono: la prima opzione restituisce l'osservabile stesso, il secondo restituisce i vecchi valori. – DCoder

risposta

50

Dal punto risultato finale di vista non v'è alcuna differenza tra i due chiamata, in modo si finirà con myArray contenente nessun elemento

Tuttavia, vi sono una piccola differenza (se non si preoccupano i diversi valori di ritorno):

self.myArray([]); 

sarà sostituisce l'istanza matrice sottostante con un array vuoto appena creato.

Mentre la volontà

self.myArray.removeAll(); 

rimuove tutti gli elementi dalla matrice sottostante, ma manterrà l'istanza matrice.

Quindi, se si dispone di più ko.observableArray utilizzando la stessa matrice underlaying potete vedere la differnce tra le due chiamate:

Demo JSFiddle.

+0

grazie per il campione. – msfanboy

+0

Dal punto di vista della memoria, 'removeAll()' è meglio? per esempio. rilascerà tutta la memoria da qualsiasi cosa si trattiene sull'array? –