rimozione di un elemento da un'ArrayCollection filtrato
-
16-09-2019 - |
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
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.