AS3 Pass вопрос о пользовательских событиях - PullRequest
0 голосов
/ 09 августа 2010

Я пытаюсь передать данные пользовательского события из одного класса в другой класс ... вот мои коды ..

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);

        }

пакет com.search.events { импорт 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); 
    }
}

}

Я ценю любую помощь ..

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Отсутствие вашего реального пользовательского класса событий усложняет задачу определения места ошибки, но, возможно, вы забыли переопределить метод clone ():

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

"При создании собственного пользовательского класса Event вы должны переопределить унаследованный метод Event.clone (), чтобы он дублировал свойства вашего пользовательского класса. Если вы не задаете все свойства, добавляемые в ваше событие подкласс, эти свойства не будут иметь правильные значения, когда слушатели обрабатывают событие redispatched. "

1 голос
/ 09 августа 2010

Вы также можете отправить ваше событие следующим образом:

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

Вам нужно, чтобы слушатель заметил, отправлено ли событие. Так что вам нужно что-то вроде

searchContainer.addEventListener(YouTubeSearchEvent.CHANGE_VIDEO_READY,onChangeVideoReady);

Если событие отправлено, вызывается метод onChangeVideoReady (event: YouTubeSearchEvent). Там у вас есть доступ к event.videoId

Может быть, вы посмотрите на структуру mate , где события также очень важны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...