Foros del Web » Creando para Internet » Flash y Actionscript »

lanzar eventos

Estas en el tema de lanzar eventos en el foro de Flash y Actionscript en Foros del Web. wenas, la preguanta es hay alguna forma de lanzar un evento en un modulo de una aplicaion web y recogerlo en otro modulo, me explico, ...
  #1 (permalink)  
Antiguo 19/03/2009, 10:57
Avatar de avielo  
Fecha de Ingreso: junio-2008
Ubicación: Córdoba (España)
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 2
lanzar eventos

wenas, la preguanta es hay alguna forma de lanzar un evento en un modulo de una aplicaion web y recogerlo en otro modulo, me explico, ten go un listado de productos en un modulo y cuando selecciono uno guardo el indice del seleccionado, cuando yo entro otro modulo para modificar quiero que se seleccione el indice que tengo guardado, pero no se como hacer para que cada vez que entre en este segundo modulo detecte el indice, solo lo detecto la primera vez que entra en este estado que es cuando se crea y se lanzan lo eventos correspodientes, pero cuando ya esta creado no se que eventos se lanzan.

Bueno espero que alguien puede ayudarme.
Un saludo y gracias.
  #2 (permalink)  
Antiguo 19/03/2009, 16:27
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: lanzar eventos

Hola avielo !

Date una vuelta a esta respuesta:
http://www.forosdelweb.com/f113/leer...1/#post2809320

Una cosa que se me olvido mencionar.
Los módulos ya extienden de la clase EventDispatcher, mira:
http://livedocs.adobe.com/flex/201/l...es/Module.html

Así que nada mas es necesario que definas los eventos y llames al método dispatchEvent.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #3 (permalink)  
Antiguo 20/03/2009, 02:41
Avatar de avielo  
Fecha de Ingreso: junio-2008
Ubicación: Córdoba (España)
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: lanzar eventos

si, pero como hago para que cuando yo seleccione un item de una lista en un modulo, se lanze un evento que me actualice el item seleccionado en un combo en otro modulo. he intentado hacerlo asi pero no me deja:

Código:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
	<mx:Script>
		<![CDATA[
						
						
						
			private function cambia():void {
			     Application.application.PedidoAux =gridProductos.selectedItem.id;
			     Application.application.dispatchEvent('actualiza');
			}
		]]>
	</mx:Script>   
    
	<mx:DataGrid id="gridProductos" change="cambia()"}">
		<mx:columns>
		</mx:columns>
	</mx:DataGrid>
</mx:Canvas>


<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Script>
		<![CDATA[
			    	
		private function inicio():void{
		Application.application.addEventListene('actualiza',cambiaSel);
		}
	                            //Actualiza el combo
                                }
</mx:Canvas>
P.D. He oviado el codigo no necesario.
  #4 (permalink)  
Antiguo 21/03/2009, 12:17
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: lanzar eventos

Hola avielo !

¿ Ahí cual es el problema ?
No se llama al método cambiaSel ?

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #5 (permalink)  
Antiguo 23/03/2009, 03:01
Avatar de avielo  
Fecha de Ingreso: junio-2008
Ubicación: Córdoba (España)
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: lanzar eventos

no, ademas me lanza un error, Cambie el Application.application.AddEventListeer(... por AddEventListener(... y ya no me lanza el error pero no entre en la funcion cambiaSel
  #6 (permalink)  
Antiguo 25/03/2009, 23:24
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: lanzar eventos

Hola avielo !

Te voy a dejar un ejemplo de como se podría implementar.
Primero vamos a crear 2 componentes.

Componente1.mxml
Código actionscript:
Ver original
  1. <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="300">
  2.     <mx:Script>
  3.         <![CDATA[
  4.             private function onClick():void {
  5.                 dispatchEvent(new Event(Event.CHANGE, true));
  6.             }
  7.         ]]>
  8.     </mx:Script>
  9.     <mx:Button x="117" y="116" label="Button" click="onClick()"/>
  10. </mx:Canvas>

Es el que va a lanzar el evento para que posteriormente el Componente2 lo capture, fíjate que el segundo parámetro al crear una instancia Event es un valor booleano, este indica si queremos propagar el evento, esto quiere decir que el evento se va pasando de hijo a padre hasta llegar a la raiz del proyecto.

Ahora nuestro segundo componente:

Componente2.mxml
Código actionscript:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="300">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.controls.Alert;
  6.            
  7.             public function showMessage():void {
  8.                 Alert.show("Ha cambiado el componente 1.");
  9.             }
  10.            
  11.         ]]>
  12.     </mx:Script>
  13. </mx:Canvas>

Aquí simplemente es un método público que lo llamaremos cuando capturemos el evento enviado por componente1.

Aquí la magia está en tener una clase controladora que se encargue de capturar los eventos de la aplicación, los centralizamos, esa es la razón por la que coloque true al lanzar el evento, con la finalidad de que se propagara y de esa manera poder capturarlo en la raiz del proyecto:

Controller.as
Código actionscript:
Ver original
  1. package
  2. {
  3.     import flash.events.Event;
  4.     import mx.core.Application;
  5.    
  6.     public class Controller
  7.     {
  8.             //Referencia a la raiz de nuestro proyecto.
  9.         private var _app:Ejemplo = Application.application as Ejemplo;
  10.        
  11.         public function Controller() {
  12.         }
  13.        
  14.         public function init():void {
  15.             _app.addEventListener(Event.CHANGE, onChange);
  16.         }
  17.        
  18.         private function onChange(evt:Event):void {
  19.             _app.showMessage();
  20.         }
  21.     }
  22. }

Si te das cuenta a la instancia _app le digo que escuche por algún cambio, al notificarle llama al método showMessage que se encuentra en la raiz:

Ejemplo.mxml (raiz del proyecto)
Código actionscript:
Ver original
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" initialize="init()">
  2.    
  3.     <mx:Script>
  4.         <![CDATA[
  5.            
  6.             private function init():void {
  7.                 var controller:Controller = new Controller();
  8.                 controller.init();
  9.             }
  10.            
  11.             public function showMessage():void {
  12.                 comp2.showMessage();
  13.             }
  14.            
  15.         ]]>
  16.     </mx:Script>
  17.    
  18.     <local:Componente1 id="comp1" />
  19.     <local:Componente2 id="comp2" />
  20.    
  21. </mx:Application>

En la raiz inicializamos nuestro controlador, también se encuentra el método showMessage que llama al método showMessage del Componente2.

Espero que te sea de ayuda.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #7 (permalink)  
Antiguo 26/03/2009, 04:18
Avatar de avielo  
Fecha de Ingreso: junio-2008
Ubicación: Córdoba (España)
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: lanzar eventos

ok lo probare, pero creo que esto es lo que buscaba gracias de nuevo jahepi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:41.