2 Stimmen

Entfernen eines Elements aus einer gefilterten ArrayCollection

Ich habe einige Probleme beim Aufrufen von getItemIndex auf eine ArrayCollection mit einer filterFunction festgelegt.

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

Ist das schon einmal jemandem aufgefallen? Was der beste Weg, um ein Element aus einer gefilterten ArrayCollection zu entfernen?

Herzlichen Dank.

Evan

4voto

Stiggler Punkte 2790

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

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

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

// remove item

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

4voto

user17510 Punkte 1519

Ich denke, Sie werden feststellen, dass es ein Quellobjekt innerhalb der ArrayCollection gibt. Was Sie sehen, ist eine Ansicht der zugrunde liegenden Daten mit einer Sortierung oder Filter angewendet. Sie wollen wirklich von der zugrunde liegenden Quelle Objekt zu löschen.

0voto

Justin Niessner Punkte 235353

Jedes Mal, wenn ich mich mit dem Hinzufügen und Entfernen von Elementen aus ArrayCollections in Flex beschäftigt habe, habe ich immer eine Kopie der ursprünglichen ArrayCollection behalten. Jedes Hinzufügen oder Entfernen von Elementen geschieht in dieser ursprünglichen Kopie.

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

0voto

evanmcd Punkte 1931

Ja, ich habe also herausgefunden, dass ich die Eigenschaft des Objekts geändert habe - in eine, die es herausgefiltert hätte - bevor ich versucht habe, es zu entfernen. In diesem Fall würde ich natürlich -1 erhalten. Mein Fehler.

Ich habe mich schließlich für deinen Vorschlag entschieden, Stiggler. Scheint gut zu funktionieren, obwohl es scheint, wie es eine weniger hackish Weg, um diese Art von Sache zu behandeln sein sollte. Vielleicht ein Parameter, den man an removeItemAt übergeben könnte, mit dem man auf die ungefilterte Sammlung zugreifen könnte.

Wie auch immer, vielen Dank an Sie beide für Ihre Antworten. Ich weiß das sehr zu schätzen.

0voto

radistao Punkte 13753

Direkt aus der Quelle entfernen

arrayCollection.source.splice(i, 1)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X