2013-07-09 9 views
26

Ich möchte die Daten in meinem Observablearray jedes Mal wegwerfen, wenn ich Daten von meinem Server bekomme.removeAll vs leer ein Array mit [] in knockoutjs

Was ist der Unterschied in der Funktionalität zwischen

self.myArray([]); 

vs

self.myArray.removeAll(); 
+0

Die erste eine neue beobachtbar und alle Zeichnungen mit dem alten schafft verloren . – DCoder

+0

@DCoder Entschuldigung, ich habe einen Tippfehler gemacht ... bitte schauen Sie noch einmal. – msfanboy

+0

Sie könnten den Quellcode von Knockout lesen, um zu sehen, wie es implementiert ist. Sie löschen beide das Array, der einzige erkennbare Unterschied ist, was sie zurückgeben - die erste Option gibt das Observable selbst zurück, die zweite gibt die alten Werte zurück. – DCoder

Antwort

50

Von Endergebnisses Sicht gibt es keinen Unterschied zwischen den beiden Anruf, so dass Sie mit myArray wird am Ende enthält, keine Elemente.

Allerdings gibt es gibt einen kleinen Unterschied (wenn Sie über die verschiedenen Rückgabewerte do not care):

self.myArray([]); 

wird ersetzt die zugrunde liegende Array-Instanz mit einem neu leeren Array erstellt.

Während die

self.myArray.removeAll(); 

werden alle Elemente aus dem zugrunde liegenden Array entfernt aber es wird die Array-Instanz halten.

Wenn Sie also mehrere haben ko.observableArray die gleiche underlaying Array verwenden, können Sie die differnce zwischen den beiden Anruf sehen:

Demo JSFiddle.

+0

danke für die Probe. – msfanboy

+0

Aus einer Speicherperspektive ist 'removeAll()' besser? z.B. Wird es den gesamten Speicher von allem freigeben, was sich auf dem Array befindet? –