My Demo class instantiates the Console class. Console instantiates the MessageTranscript class. I want Demo to access MessageTranscript’s public method addTextMessage().
package {
public class Demo extends Sprite {
private var console:Console;
public function Demo():void {
console = new Console();
addChild(console);
console.addTextMessage(params);
}
}
}
-------------------------------------------------------------------------------
package {
public class Conosole extends Sprite {
private var messageTranscrip:MessageTranscript;
public function Console():void {
messageTranscript = new MessageTranscript();
addChild(messageTranscript);
}
public function addTextMessage(p):void {
messageTranscript.addTextMessage(p);
}
}
}
-------------------------------------------------------------------------------
package {
public class MessageTranscript extends Sprite {
public function MessageTranscript():void {
}
public function addTextMessage(p):void { << DEMO WANTS TO ACCESS THIS
// do some stuff
}
}
}
This causes a null object reference error because Demo is trying to get to a method of its subclass’s subclass before that method is available.
It works to have MessageTranscript dispatch a custom event that Console listens for, and then to have Console dispatch the custom event from that listener’s handler function, and Demo listens for THAT event. By so doing Demo basically waits until the method is available:
package {
public class Demo extends Sprite {
private var console:Console;
public function Demo():void {
console = new Console();
addChild(console);
console.addEventListener(DemoEvent.MESSAGE_TRANSCRIPT_ADDED, msgTranscriptAdded);
}
private function msgTranscriptAdded(e:DemoEvent):void {
console.addTextMessage(params);
}
}
}
-------------------------------------------------------------------------------
package {
public class Conosole extends Sprite {
private var messageTranscrip:MessageTranscript;
public function Console():void {
messageTranscript = new MessageTranscript();
addChild(messageTranscript);
}
public function addTextMessage(p):void {
messageTranscript.addTextMessage(p);
msgTranscript.addEventListener(DemoEvent.MESSAGE_TRANSCRIPT_ADDED, msgTranscriptAdded);
}
private function msgTranscriptAdded(e:DemoEvent):void {
dispatchEvent(new DemoEvent(DemoEvent.MESSAGE_TRANSCRIPT_ADDED));
}
}
}
-------------------------------------------------------------------------------
package {
public class MessageTranscript extends Sprite {
public function MessageTranscript():void {
// etc.
dispatchEvent(new DemoEvent(DemoEvent.MESSAGE_TRANSCRIPT_ADDED));
}
public function addTextMessage(p):void { << DEMO WANTS TO ACCESS THIS
// do some stuff
}
}
}
But I’m looking at this and thinking, “Hm, this just doesn’t look like the way it should be done.”
Is there a more elegant/best practice way for Demo to access MessageTranscript’s public method?