$mival
16.11.2007, 15:46
Есть два класса. в первом (ControlManager) создается экземпляр второго(VideoManager), потом по нажатию кнопки из первого посылается событие во второй(соответственно второй предварительно подписывается на это событие). Во втором есть обработчик события, но он не видит своего класса вообще.
ControlManager:
import mx.events.EventDispatcher;
import mx.utils.Delegate;
import main.VideoManager;
class main.ControlManager extends MovieClip
{
public var playStatus:Boolean = false; // true - is play
private var play_b:MovieClip;
private var vm:VideoManager;
public var addEventListener:Function;
public var removeEventListener:Function;
public var dispatchEvent:Function;
public function ControlManager()
{
play_b = this["pl"];
EventDispatcher.initialize(this);
vm = new VideoManager(this);
}
private function onLoad():Void
{
play_b.onRelease = Delegate.create(this, playHandler);
}
private function playHandler():Void
{
trace("Play/stop нажали");
playStatus ? play_b.gotoAndStop("play") : play_b.gotoAndStop("pause");
playstatus = !playStatus;
}
public function set playstatus(p:Boolean):Void
{
playStatus=p;
dispatchEvent({type:"onPlay",target:this});
}
}
VideoManager:
import mx.events.EventDispatcher;
class main.VideoManager
{
private var obj:Object;
public function VideoManager(o:Object)
{
obj=o;
configureListeners();
}
private function configureListeners():Void
{
obj.addEventListener("onPlay", playHandler);
}
private function playHandler(o:Object):Void {o.target.playStatus ? startVideo() : pauseVideo();}
private function startVideo():Void
{
trace("startVideo");
}
private function pauseVideo():Void
{
trace("pauseVideo");
}
}
т.е. по событию мы должны вызывать поочереди то VideoManager.startVideo(), то VideoManager.pauseVideo(), но они почему то недоступны из самого же VideoManager'a
ControlManager:
import mx.events.EventDispatcher;
import mx.utils.Delegate;
import main.VideoManager;
class main.ControlManager extends MovieClip
{
public var playStatus:Boolean = false; // true - is play
private var play_b:MovieClip;
private var vm:VideoManager;
public var addEventListener:Function;
public var removeEventListener:Function;
public var dispatchEvent:Function;
public function ControlManager()
{
play_b = this["pl"];
EventDispatcher.initialize(this);
vm = new VideoManager(this);
}
private function onLoad():Void
{
play_b.onRelease = Delegate.create(this, playHandler);
}
private function playHandler():Void
{
trace("Play/stop нажали");
playStatus ? play_b.gotoAndStop("play") : play_b.gotoAndStop("pause");
playstatus = !playStatus;
}
public function set playstatus(p:Boolean):Void
{
playStatus=p;
dispatchEvent({type:"onPlay",target:this});
}
}
VideoManager:
import mx.events.EventDispatcher;
class main.VideoManager
{
private var obj:Object;
public function VideoManager(o:Object)
{
obj=o;
configureListeners();
}
private function configureListeners():Void
{
obj.addEventListener("onPlay", playHandler);
}
private function playHandler(o:Object):Void {o.target.playStatus ? startVideo() : pauseVideo();}
private function startVideo():Void
{
trace("startVideo");
}
private function pauseVideo():Void
{
trace("pauseVideo");
}
}
т.е. по событию мы должны вызывать поочереди то VideoManager.startVideo(), то VideoManager.pauseVideo(), но они почему то недоступны из самого же VideoManager'a