Pergunta

Eu estou tendo alguns problemas ao chamar getItemIndex em um ArrayCollection com um conjunto filterFunction.

eu fizer algo como myAC.removeItemAt(myAC.getItemIndex(myObject)), que funciona bem quando a filtragem não foi aplicada. Assim que a filtragem é aplicada, getItemIndex parece retornar -1 em todos os casos.

Alguém se deparar com isso antes? Qual a melhor maneira de remover um formulário de item de um ArrayCollection filtrada?

Muito obrigado.

Evan

Foi útil?

Solução

O que exatamente é o seu filtro filtrando? Se você já filtrados tudo, getItemIndex deve retornar -1.

Você está esperando para remover itens que ainda são visíveis quando o filtro foi aplicado? Se você ainda quer remover um item que é filtrada para fora, você pode desativar temporariamente o filtro:

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

// remove item

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

Outras dicas

Eu acho que você vai encontrar lá é um objeto de origem dentro do ArrayCollection. O que você está vendo é uma visão dos dados subjacentes com uma espécie ou filtro aplicado. Você realmente deseja excluir o objeto de origem subjacente.

Toda vez que eu lidei com adicionar e remover itens de ArrayCollections em Flex, eu sempre manteve uma cópia do ArrayCollection originais. Qualquer adição ou remoção de itens acontecer com essa cópia original.

Uma vez que as mudanças foram feitas para o original, eu mover aqueles com expectativa a lista filtrada.

Remova-fonte diretamente

arrayCollection.source.splice(i, 1)

Sim, então eu achei que eu estava mudando a propriedade do objeto - para uma que teria filtrados - antes de tentar removê-lo. É claro que eu iria ficar -1 nesse caso. O meu erro.

acabei indo com sua sugestão, Stiggler. Parece funcionar bem, embora parece que deve haver uma maneira menos hackish para lidar com este tipo de coisa. Talvez um parâmetro que você poderia passar para removeItemAt que iria deixá-lo acessar a coleção não filtrada.

De qualquer forma, graças a ambos por suas respostas. Muito apreciada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top