Si tenemos un componente en el que tenemos instanciado un componente lista, que usa un itemRenderer para tabular la información, y queremos detectar el Click sobre uno de los item del componente lista desde el componente Principal, debemos actuar tanto sobre el itemRender, como sobre la película principal.

ItemRenderer

<s:ItemRenderer xmlns:fx=”http://ns.adobe.com/mxml/2009″
xmlns:s=”library://ns.adobe.com/flex/spark”
xmlns:mx=”library://ns.adobe.com/flex/mx”
autoDrawBackground=”true”
buttonMode=”true” click=”fnClic(event)” >

<fx:Script>
<![CDATA[
import mx.events.ItemClickEvent;

protected function fnClic(event:MouseEvent):void {
var e:ItemClickEvent = new ItemClickEvent(ItemClickEvent.ITEM_CLICK, true);
e.item = data;
e.index = itemIndex;
dispatchEvent(e);
}

]]>
</fx:Script>

……..

</s:ItemRenderer>

 

De esta forma, le hemos dicho que cada vez que hagan click sobre uno de los item lance un evento de tipo click.

Para posteriormente obtener la información del propio evento desde el componente principal, donde va la lista:

COMPONENTE PRINCIPAL

    <fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.events.ItemClickEvent;

protected function fnControlaItemClicado(evt:ItemClickEvent):void {
//Alert.show(evt.currentTarget.selectedItem.name);
}

protected function fnGestionaItems(event:FlexEvent):void {
lista.addEventListener(ItemClickEvent.ITEM_CLICK, fnControlaItemClicado);
}

<s:List  x=”0″ y=”15″ width=”269″ height=”269″ initialize=”fnGestionaItems(event)” itemRenderer=”elItemEnQuestion”
styleName=”tuEstilodeLista” id=”lista” />

Y ya que estamos, si rizamos el rizo…, ¿y si este componente principal, estuviera instanciado a su vez dentro de otro componente principal?.

COMPONENTE PRINCIPAL

componenteSecundario.lista.addEventListener(ItemClickEvent.ITEM_CLICK, fnControlaItemClicado);

 

protected function fnControlaItemClicado(evt:ItemClickEvent):void {
Alert.show(evt.currentTarget.selectedItem.name);

 

¿Fácil? Después de dar con ello, muy fácil jejeje.

Un saludo pues,

J. Ramón León