Comunidad de diseño web y desarrollo en internet online

Acceder al itemRender en un TileList

Citar            
MensajeEscrito el 04 Oct 2009 10:18 pm
Hola a todos,
tengo el siguiente código:

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">
   <mx:Script>
          <![CDATA[
         [Bindable]
         private var _dpImages:ArrayCollection = new ArrayCollection();

         private function initApp():void
         {
            tlImages.itemRenderer = new ClassFactory (ImageTileListRenderer);
            tlImages.dataProvider = _dpImages;

            _dpImages.addItem({dato:'wiiii'});
         }
          ]]>
   </mx:Script>
   <mx:TileList id="tlImages" width="100%" height="100%" y="0" x="0"/>
</mx:Application>


y mi ImageTileListRender es:

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
    verticalScrollPolicy="off" horizontalScrollPolicy="off">
    <mx:Canvas id="cvImage" width="90" height="90">
    </mx:Canvas>
</mx:Canvas>


Lo que quiero hacer es acceder al Item nuevo que se cree dentro de tlImages cada vez que agregue un objeto en el data provider.

Lo intente así:

Código ActionScript :

private function initApp():void
{
   tlImages.itemRenderer = new ClassFactory (ImageTileListRenderer);
   tlImages.dataProvider = _dpImages;

   _dpImages.addItem({dato:'wiiii'});
   
   var factory:IFactory = tlImages.getItemRendererFactory( _dpImages.getItemAt(_dpImages.length-1) );
   var item:ImageTileListRenderer = factory.newInstance() as ImageTileListRenderer;
   trace('item.cvImage', item.cvImage);
}


Pero no me funciona y me bota un error.

¿Cual sería la forma correcta de hacerlo?

Por Otaku RzO

BOFH

1890 de clabLevel

12 tutoriales
1 articulo

Genero:Masculino   Desarrollador de GAIA Bastard Operators From Hell

Lima - Perú

firefox
Citar            
MensajeEscrito el 05 Oct 2009 12:16 am
El problema que veo es que intentas acceder al renderer justo después de modificar el dataProbider con lo que aun no está renderizado dentro del componente TileList.

Y segundo, que aun renderizado el itmRenderer, tú con el Factory no accedes directamente al itemRenderer sino que creas una copia de la clase, con lo que no puedes acceder al Canvas ya en esta copia este Canvas no está renderizado (esto no sería problema si lo que quisieses es acceder a una variable de la clase)

Yo lo haría así:

Código ActionScript :

...
_dpImages.addItem({dato: 'wiiii'});

tlImages.validateNow();
var item:ImageTileListRenderer=tlImages.indexToItemRenderer(_dpImages.length - 1) as ImageTileListRenderer;

trace('item.cvImage', item.cvImage);


Ten en cuenta que como he dicho, solo puedes acceder a los itemRenderers que esten renderizados y visibles..

;)

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 05 Oct 2009 06:05 am
Que rápida respuesta, muchisimas gracias, me has salvado :alabado: .
Estuve tan metido en sólo Flash/AS3 que me olvide de varios tips de Flex como ese que mensionas, incluso comente ahí y no lo recordé :( . Pero siquiera ahora me aclaran mejor el panorama y, aparte, encontré otras cosas interesantes mientras intentaba darle solución a esto :) .

Apartir de ahora tendré presente el "validateNow", "isItemVisible" y el "indexToItemRenderer" en mis componentes de tipo Lista.
(y)

Por Otaku RzO

BOFH

1890 de clabLevel

12 tutoriales
1 articulo

Genero:Masculino   Desarrollador de GAIA Bastard Operators From Hell

Lima - Perú

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.