2010-08-09 5 views
0

Je suis en train de transmettre des données d'événements personnalisés de 1 classe à une autre classe ... voici mes codes ..AS3 passe de données personnalisé événement Question

a.as

private function onClick(event:MouseEvent):void{ 
    dispatchEvent(new YouTubeSearchEvent(YouTubeSearchEvent.CHANGE_VIDEO_READY, videoId)); 
    } 

b.as

private var newVideoID:String; 

public function get selectedVideoID():String{ 
     return newVideoID; 
    } 


private function buildSingleCont(videoResult:Array):void{ 

    tn=new a(); 
    addChild(tn); 
    tn.addEventListener(YouTubeSearchEvent.CHANGE_VIDEO_READY, getNewVideoID); 

} 

private function getNewVideoID(event:YouTubeSearchEvent):void{ 
     newVideoID=event.videoResult; 

} 

c.as

// this is the main class..... 
private var newvideoida:String; 
public function c(){ 
createSearchContainer() //this method is called before b.as and c.as are called... 
}  

private function createSearchContainer():void{ 
     searchContainer=new b(); 
     newvideoida=searchContainer.selectedVideoID; //I want to get b.as newVideoID variable 
     trace(newvideoida); //display nothing..... 

     addChild(searchContainer); 

     } 

package com.search.events { import flash.events.Event;

public class YouTubeSearchEvent extends Event 
{ 
    public static const FEED_VIDEO_READY:String="feed_video_ready"; 
    public static const CHANGE_VIDEO_READY:String="change_video_ready"; 

    public var videoResult:*; 

    public function YouTubeSearchEvent(type:String, videoResult:*) 
    { 
     super(type); 

     this.videoResult=videoResult; 

    } 
    public override function clone():Event { 
     return new YouTubeSearchEvent(this.type, this.videoResult); 
    } 
} 

}

Je vous remercie de toute aide ..

+1

il serait plus facile de vous aider si vous postez la définition de la classe complète ... – OXMO456

+0

Je l'ai maintenant .... tout ce dont j'ai besoin est bulle = vrai dans mon événement personnalisé ... – FlyingCat

Répondre

2

Ne pas voir votre classe d'événement personnalisé réelle rend un peu difficile de voir où les mensonges d'erreur, mais je suppose que vous pourriez avoir oublié de remplacement la méthode clone():

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/events/Event.html#clone%28%29

« Lorsque vous créez votre propre classe d'événement personnalisé, vous devez remplacer l'événement hérité Méthode .clone() pour dupliquer les propriétés de votre classe personnalisée. Si vous ne définissez pas toutes les propriétés que vous ajoutez dans votre sous-classe d'événements, ces propriétés ne posséderont pas les valeurs correctes lorsque les écouteurs gèreront l'événement redistribué «

+0

Je viens de mettre à jour mon événement personnalisé dans le post ... Je n'ai pas dormi toute une nuit .... ma tête n'est pas avec moi maintenant .... ... + 1 si – FlyingCat

+0

J'ai également changé mon c.as pour rendre les codes plus clairs .... – FlyingCat

+0

Donc, ma conjecture était correcte - pas de méthode clone() de remplacement dans votre événement personnalisé. Tu devrais essayer. public override fonction clone(): Evénement { return new YouTubeSearchEvent (this.type, this.videoResult); } – Quasimondo

1

Vous pouvez également envoyer votre événement comme celui-ci.

var event:YouTubeSearchEvent = new YouTubeSearchEvent(YouTubeSearchEvent.CHANGE_VIDEO_READY); 
event.videoId = theOneVideoId; 
dispatchEvent(event); 

vous avez besoin d'un auditeur à remarquer si l'événement est distribué vous avez donc besoin quelque chose comme

searchContainer.addEventListener(YouTubeSearchEvent.CHANGE_VIDEO_READY,onChangeVideoReady); 

Si l'événement est maintenant distribué, la méthode onChangeVideoReady.. (event: YouTubeSearchEvent) est appelé Vous avez accès à event.videoId

Vous avez peut-être déjà consulté le framework mate, où les événements sont également très importants.