2009-04-25 15 views
2

Ich habe einige Probleme beim Aufruf von getItemIndex für eine ArrayCollection mit einem filterFunction-Set.Entfernen eines Elements aus einer gefilterten ArrayCollection

Ich mache etwas wie myAC.removeItemAt(myAC.getItemIndex(myObject)), die gut funktioniert, wenn die Filterung nicht angewendet wurde. Sobald die Filterung angewendet wird, scheint getItemIndex in jedem Fall -1 zurückzugeben.

Hat jemand schon mal darüber gestolpert? Was ist der beste Weg, um ein Objekt aus einer gefilterten ArrayCollection zu entfernen?

Vielen Dank.

Evan

Antwort

4

Was genau filtert Ihr Filter aus? Wenn Sie alles herausgefiltert haben, sollte getItemIndex -1 zurückgeben.

Sie möchten Elemente entfernen, die noch sichtbar sind, wenn Ihr Filter angewendet wurde? Wenn Sie noch ein Element entfernen möchten, die herausgefiltert ist, könnten Sie vorübergehend den Filter deaktivieren:

var filter:Function = ac.filterFunction; 
ac.fiterFunction = null; 
ac.refresh(); 

// remove item 

ac.filterFunction = filter; 
ac.refresh(); 
0

Jedes Mal, wenn ich mit dem Hinzufügen und Entfernen von Elementen aus ArrayCollections in Flex behandelt habe, habe ich immer immer eine Kopie des ursprünglichen Arraycollection. Jedes Hinzufügen oder Entfernen von Elementen geschieht mit dieser Originalkopie.

Sobald die Änderungen am Original vorgenommen wurden, verschiebe ich diese in die gefilterte Liste.

0

Ja, so habe ich erfahren, dass ich die Eigenschaft des Objekts wurde verändert sich - auf eine, die es gefiltert hätte out - vor dem Versuch, es zu entfernen. Natürlich würde ich in diesem Fall -1 bekommen. Mein Fehler.

Ending mit Ihrem Vorschlag, Stiggler. Scheint gut zu funktionieren, obwohl es scheint, dass es eine weniger hackische Art geben sollte, mit dieser Art von Dingen umzugehen. Vielleicht könnte ein Parameter an removeItemAt übergeben werden, mit dem Sie auf die ungefilterte Auflistung zugreifen können.

Wie auch immer, danke an beide für Ihre Antworten. Sehr geschätzt.

4

Ich denke, Sie finden ein Quellobjekt in der ArrayCollection. Was Sie sehen, ist eine Ansicht der zugrunde liegenden Daten mit einer Art oder Filter angewendet. Sie möchten wirklich aus dem zugrunde liegenden Quellobjekt löschen.

0

Entfernen Sie es von der Quelle direkt

arrayCollection.source.splice(i, 1) 
Verwandte Themen