22 de mayo de 2009

Utilizando el IViewCursor en Flex

Estuve haciendo una aplicación tipo buzón de correo. Tenía que encontrar el id de un usuario en la lista de contactos dado. Para encontrarlo dentro del ArrayCollection sin tener que hacer un for, utilizé un cursor, todo fino cuando encuentra lo que quiero, pero cómo obtener el index de lo que se encontró?... Bueh.. hice lo siguiente, el ArrayCollection tiene un método que se llama getItemIndex que recibe como paramétro un Objeto.. así que bueno.. esto fue lo que resolví.

1. Primero ordenamos la lista
private function sortCollection():void{
var col:ICollectionView = nuestroArrayCollection;
var sort:Sort = new Sort();
       
       //Los ordeno por id, 
       sort.fields = [new SortField("id",true,false,true)];
      
      //Asignamos la instancia de sort al CollectionView
      col.sort = sort;

      //Refrescamos la lista
      col.refresh();
}

2. Buscamos el id dentro de la colección de la siguiente manera:


//Creamos un cursor con la interfaz IViewCursor
private var myCursor          :IViewCursor;

//Asignamos a myCursor lo siguiente
myCursor = nuestroArrayCollection.createCursor()

//Usamos el método findAny un Object de lo que queremos buscar, en este caso mi arrayCollection tiene un atributo id, lo que hacemos es crear el objeto con esa información {id:studentId}
myCursor.findAny({id:studentId});

//Y finalmente, para obtener el indice o el objeto encontrado por el Cursor, usamos los métodos que ya trae el ArrayCollection (getItemAt, o getItemIndex)
indexContactList    = nuestroArrayCollection.getItemIndex(myCursor.current);


Y ya, es todo, leyendo un poco sobre el IViewCursor en langref explica que si tenemos una colección con ids únicos, el método findAny, es más efectivo que findFirst, o findLast.

Para más información: http://www.adobe.com/livedocs/flex/3/langref/mx/collections/IViewCursor.html

No hay comentarios.:

Publicar un comentario