Domanda

sto avendo alcuni problemi quando si chiama getItemIndex su un ArrayCollection con un set filterFunction.

che faccio qualcosa di simile myAC.removeItemAt(myAC.getItemIndex(myObject)), che funziona bene quando non è stato applicato il filtraggio. Non appena viene applicato il filtro, getItemIndex sembra tornare -1 in ogni caso.

Qualcuno ha incontrato questo prima? Quello che il modo migliore per rimuovere un elemento formano un ArrayCollection filtrato?

Grazie mille.

Evan

È stato utile?

Soluzione

Che cosa esattamente è il filtro filtrando fuori? Se hai filtrato tutto, getItemIndex deve restituire -1.

Speri per rimuovere gli elementi che sono ancora visibili quando è stato applicato il filtro? Se si vuole ancora di rimuovere un elemento che è filtrato, si potrebbe disattivare temporaneamente il filtro:

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

// remove item

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

Altri suggerimenti

Credo che troverete v'è un oggetto di origine all'interno del ArrayCollection. Quello che state vedendo è una vista dei dati sottostanti con un ordinamento o filtro applicato. Sei sicuro di voler eliminare dall'oggetto sorgente sottostante.

Ogni volta che ho affrontato con l'aggiunta e la rimozione di elementi da ArrayCollections in Flex, ho sempre tenuto una copia del ArrayCollection originale. Qualsiasi aggiunta o la rimozione di elementi capita di quella copia originale.

Una volta che le modifiche sono state apportate all'originale, mi muovo quelli in avanti per l'elenco filtrato.

Rimuovi dalla fonte direttamente

arrayCollection.source.splice(i, 1)

Sì, così ho scoperto che stavo cambiando la proprietà dell'oggetto - a uno che ha voluto che filtrato - prima di tentare di rimuoverlo. Naturalmente vorrei ottenere -1 in quel caso. Il mio errore.

finito per andare con il vostro suggerimento, Stiggler. Sembra funzionare bene, anche se sembra che ci dovrebbe essere un modo meno hackish per gestire questo tipo di cose. Forse un parametro che si poteva passare a removeItemAt che permetterà di accedere alla raccolta non filtrato.

In ogni caso, grazie a tutti e due per le vostre risposte. Molto apprezzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top