2010-01-02 8 views
0

Je voudrais distribuer un événement de ma classe avec une URL.AS3: Envoi d'événements via dispatchEvent-pass params?

Je sais que je peux faire ce qui suit:

import flash.events.EventDispatcher; 

private function thumbClick(e:MouseEvent):void 
{ 
    dispatchEvent(new Event("clicked")); 
} 

Mais je ne sais pas comment j'envoyer params avec l'événement ...?

Aussi, dans mon PORTEUR app, j'essaie:

var my_ev:Event = new Event("clickedImage"); 
my_ev.hasOwnProperty(e.currentTarget.link); 
dispatchEvent(my_ev); 

... mais je ne suis pas sûr que ce serait la syntaxe correcte.

Merci pour toute aide, JML

Répondre

5

Allan est correcte, vous voulez faire un événement personnalisé. Couple de choses à noter:

import flash.events.Event; 

public class ThumbnailEvent extends Event 
{ 
    public static var THUMB_CLICKED:String = "thumbClicked"; 

    private var _url:String; 
    public function get url():String { return _url } 

    public function ThumbnailEvent (type:String, url:String, bubbles:Boolean=false, cancelable:Boolean=false) 
    { 
     super(type,bubbles,cancelable); 
     _url = url 
    } 

    override public function clone():Event 
    { 
     return new ThumbnailEvent(type, url, bubbles, cancelable); 
    } 
} 

Les événements personnalisés doivent toujours remplacer le clone. Si l'événement est bouillonné ou relayé de toute façon, il a besoin de cette méthode. Les propriétés personnalisées doivent être privées avec un getter en lecture seule. Ceci est une convention standard pour empêcher l'altération des propriétés tout au long de la vie de l'événement.

En utilisant cette approche changerait votre code:

private function thumbClick(e:MouseEvent):void 
{ 
    dispatchEvent(new ThumbnailEvent(ThumbnailEvent.THUMB_CLICKED, myUrlString)); 
} 

//elsewhere 

addEventListener(ThumbnailEvent.THUMB_CLICKED, thumbClickedHandler); 

private function thumbClickedHandler(event:ThumbnailEvent):void 
{ 
    var link:String = event.url; 
} 

Custom Event tutorial at adobe.com

+0

Merci beaucoup d'inclure ces détails, Joel. – jml

1

Je viens de faire une classe d'événement personnalisé.

import flash.events.Event; 


public class ThumbnailEvent extends Event 
{ 
    public static var THUMB_CLICKED:String = "thumbClicked"; 
    public var url:String; 

    public function ThumbnailEvent (type:String,url:String) 
    { 
       super(type); 
       this.url = url 
    } 
} 

puis l'utiliser comme:

var thumbEvent:ThumbnailEvent = new ThumbnailEvent(ThumbnailEvent.THUMB_CLICKED,"myURL"); 
dispatchEvent(thumbEvent); 
+0

excellent. Merci pour l'aide! Je n'avais pas réalisé que les événements pouvaient être utilisés pour emballer les choses en tant que telles ... J'aurais dû. – jml

+0

pas de soucis :) et oui suivez la façon de Joel de le faire, je suis juste un peu paresseux parfois .. haha ​​ – Allan