Comunidad de diseño web y desarrollo en internet online

Como recargar un componente desde la aplicacion principal

Citar            
MensajeEscrito el 04 Ene 2010 04:58 am
Hola!

Ahora solo me falta recargar un componente desde la aplicacion principal. Dicho componente contiene un datagrid (que contiene datos que deben volverse a cargar). Ademas el componente esta dentro de un ViewStack. Les coloco el codigo de la aplicacion principal. Yo trate de invocar a reload desde la función id_foro_handler, pero no funcionó. Lo que quiero es recargar el componente ViewSubforos desde la funcion id_foro_handler. Este componente contiene al datagrid que debe volverse a refrescar. Claro esto solo debe hacerse desde la aplicacion principal. El componente tiene una funcion llamada ShowInfo que cambia el dataProvider del Datagrid. ¿Hay alguna forma de invocar esta funcion desde la aplicacion principal? ... Alguna otra idea de como recargar o refrecar el componente desde la función id_foro_handler y asi poder recargar o refescar el datagrid con nuevos datos ....

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:comp="components.*" layout="absolute" width="100%">
   <mx:Script>
      <![CDATA[
         [Bindable]
         public var id_foro:int = 1;
         [Bindable]
         public var id_subforo:int = 1;
         [Bindable]
         public var id_topico:int = 1;
         [Bindable]
         public var id_mensaje:int = 1;
         import flash.events.TextEvent;
         import mx.controls.Alert;
         private function id_foro_handler(evt:TextEvent):void {
            id_foro = parseInt(evt.text);
            var obj:Object = vsforos.getChildAt(1);
            obj.reload();
            vsforos.selectedIndex = 1; 
         }         
         private function id_subforo_handler(evt:TextEvent):void {
            id_subforo = parseInt(evt.text);            
            var obj:Object = vsforos.getChildAt(2);
            obj.reload();
            vsforos.selectedIndex = 2;            
         }         
         private function id_topico_handler(evt:TextEvent):void {
            id_topico = parseInt(evt.text);
            vsforos.selectedIndex = 3;
            var obj:Object = vsforos.getChildAt(3);
            obj.reload();               
         }         
      ]]>
   </mx:Script>  
   <mx:VBox width="100%">
      <mx:LinkBar dataProvider="{vsforos}" borderStyle="solid"/>
      <mx:ViewStack id="vsforos" width="100%">
         <mx:Canvas id="viewForos" label="Foros" width="100%">
            <comp:ViewForos id_foro_shared="id_foro_handler(event)"/>   
         </mx:Canvas>   
         <mx:Canvas id="viewSubforos" label="Subforos" width="100%">
            <comp:ViewSubforos id_foro="{id_foro}" id_subforo_shared="id_subforo_handler(event)"/>   
         </mx:Canvas>   
         <mx:Canvas id="viewTopicos" label="Topicos" width="100%">
            <comp:ViewTopicos id_subforo="{id_subforo}" id_topico_shared="id_topico_handler(event)"/>   
         </mx:Canvas>
         <mx:Canvas id="viewMensajes" label="Mensajes" width="100%">
            <comp:ViewMensajes id_topico="{id_topico}"/>   
         </mx:Canvas>
      </mx:ViewStack>  
      <mx:Label x="20" y="470" text="id_foro={id_foro} id_subforo={id_subforo} id_topico={id_topico}"/>  
   </mx:VBox>
</mx:Application>

Gracias de Antemano

Por jservingo

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Ene 2010 12:31 pm
Estás haciendo una llamada a un método reload que dupongo debería ser el que refresque el datagrid, solo que lo llamas inmediatamente después de cambiar de index:

var obj:Object = vsforos.getChildAt(1);
obj.reload();
vsforos.selectedIndex = 1;

Así la llamada se pierde porque el componente no se inicializa tan rápido, deberías hacerlo en el creationComplete del componente. Puedes usar un creationPolicy=''all" en tu Viewstack si quieres que los componentes estén disponibles desde el inicio, pero recuerda que eso puede penalizar el tiempo de inicialización de tu aplicación

Jorge

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Ene 2010 02:12 pm
El componente estaba previamente cargado!!! El reload no hace nada!!!
¿Y habrá alguna otra forma de recargar o refrescar el componente o el datagrid desde la aplicacion principal?
Otra opción sería llamar al método showInfo que se encuentra dentro del componente desde la aplicación principal ¿Alguien sabe como hacerlo? ¿Habra algun evento parecido al creationComplete que se pueda llamar despues que un componente ha sido cargado y cuando dicho componente se vuelva a mostrar?

Saludos

Por jservingo

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Ene 2010 02:23 pm
Vale, llamas al reload como una forma mágica de recargar algo que no se carga (no son módulos).
Si tienes una función showInfo a la que puedes llamar, accedes a ella por el nombre de instancia del componente, suponiendo que se llame miComponente, sería

miComponente.showInfo()

Dale un creationPolicy="all" al ViewStack así no recibes errores de método no existente (recuerda que tiene que ser público)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Ene 2010 03:07 pm
Problema RESUELTO
Ok ya funciona bien.

El componente c1 tiene una funcion pública que recarga los datos. El truco es llamar a esta funcion despues de cambiar el viewstack, de lo contrario no funciona.

private function id_foro_handler(evt:TextEvent):void {
id_foro = parseInt(evt.text);
vsforos.selectedIndex = 1;
c1.reloadData();
}

Muchas gracias Jorge!!!

Por jservingo

3 de clabLevel



 

chrome

 

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