2009-05-24 15 views
5

He leído mucho a través de publicaciones en el foro y tutoriales, pero todavía no puedo envolver mi cerebro en eventos y oyentes de eventos. Tengo un ejemplo bastante simple, pero no puedo hacer que funcione.agregando un detector de eventos personalizado en as3

Tengo una matriz Recolección de objetos personalizados en un repetidor, cuando se hace clic en uno de esos objetos, quiero que un componente diferente muestre los datos asociados con ese objeto.

Esto es lo que tengo, pero el oyente nunca responde (el despachador parece estar trabajando, porque se crea el nuevo evento y puedo ver el trazado con la salida adecuada). Sospecho que es porque cuando llamo addEvent Oyente, lo estoy haciendo en el objeto equivocado. Según entiendo, el objeto que mostrará los datos del objeto es el objeto que debería tener el oyente del evento, y escuchará todos los eventos de esta naturaleza, pero tal vez no entendí bien.

Mi evento personalizado:

public class SelectObjectEvent extends Event 
    { 
     public function SelectObjectEvent(customEventString:String, myObject:customObject) 
     { 
       super(customEventString, true, false); 
       trace(customEventString+" "+myObject); 
     } 
    } 
} 

Mi objeto personalizado tiene la siguiente función que se llama el clic:

public function selectObject(myObject:customObject):void 
     { 
      dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));    
     } 

y el componente Quiero mostrar el objeto seleccionado tiene el siguiente constructor:

public function SelectedObjectDisplayClass() 
     { 
      addEventListener("OBJECT_SELECTED", this.showObject) 
     } 

     public function showObject(event:Event):void 
      { 
      trace("Show object: "+event); 
     } 

Respuesta

3

No está del todo claro dónde están los dos últimos trozos de código ar e, pero parece que debe llamar al addEventListener en el objeto que se extiende EventDispatcher.

Es decir, si su segundo trozo pertenece a un objeto personalizado llamado Clickable, que se extiende EventDispatcher y llama dispatchEvent() al hacer clic, a continuación, su componente debe estar llamando myClickable.addEventListener(...) donde myClickable es una instancia de hacer clic. ¿Tiene sentido?

Pero suponiendo que su tercer fragmento de código no está en la misma clase que el segundo, no parece que lo esté haciendo. Está agregando un oyente a la clase que posee el tercer bloque de código, que según tengo entendido no es el que extiende EventDispatcher.

+0

Bueno ... sí, el segundo trozo pertenece a un objeto que distribuye el evento, pero no se puede hacer clic, y no se extiende EventDispatcher por lo que yo sé (que amplía UIComponent.) Es una objeto de juego que se encuentra en un componente de lista. Cuando se selecciona ese objeto en la lista, distribuye su evento. ¿Cada objeto que distribuye un evento debe extender EventDispatcher? – Martholomew

+0

Tal vez entonces mi problema es que la lista debe enviar el evento, con el objeto seleccionado en el argumento? – Martholomew

+1

Bueno, DisplayObject extiende EventDispatcher, por lo que cualquier cosa que tengas en el escenario también lo hará. No sé quién debería enviar el evento, quién sabe cuándo hacerlo, supongo, pero eso depende de tu código. Lo que es definitivo es que si A distribuye el evento y B lo recibe, entonces su llamada debe ser someA.addEventListener (eventType, someB.method). En este momento, parece que B tiene que agregar un detector de eventos a sí mismo. – fenomas

0

Solo un vistazo rápido a su código y observe que su segundo parámetro dispatchEvent es la clase, no la instancia del objeto. ¿No debería ser esto myObject?

public function selectObject(myObject:customObject):void 
     { 
       dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", **customObject**));       
     } 
Cuestiones relacionadas